美文网首页
leetcode103.Binary Tree Zigzag L

leetcode103.Binary Tree Zigzag L

作者: 就是果味熊 | 来源:发表于2020-07-25 16:38 被阅读0次

    我又肥来复习了。
    原题链接https://leetcode.com/problems/binary-tree-zigzag-level-order-traversal/

    Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to right, then right to left for the next level and alternate between).

    For example:
    Given binary tree [3,9,20,null,null,15,7],
    3
    /
    9 20
    /
    15 7
    return its zigzag level order traversal as:
    [
    [3],
    [20,9],
    [15,7]
    ]

    这里主要是考虑用两个栈,在各层分别从左至右,从右至左入栈。
    比如第一行直接进栈stack1,然后开始遍历stack1,若非空则栈顶出栈,数据进入res1,同时将栈顶数据的额子节点入stack2,由于是zigzag式输出,此时入栈stack2要从左往右入栈,这样出栈时的数据才是从右往左输出。之后继续判断stack1是否为空,循环输出数据,直至stack1为空,之后判断res1是否空,将res1输入res。 同理判断stack2,左右顺序与stack1相反,直至stack1和stack2均为空,输出res。

    之所以有个栈命名为deques,是刚开始入栈顺序弄错了,想到了用一个队列结构 /手动滑稽。

    class Solution:
        def zigzagLevelOrder(self, root: TreeNode) -> List[List[int]]:
            if not root:
                return []
            stack = []
            res = []
            deques = []
            deques.append(root)
            while (stack or deques):
                res1 = []
                while stack:
                    item = stack.pop()
                    res1.append(item.val)
                    if item.right:
                        deques.append(item.right)
                    if item.left:
                        deques.append(item.left)
                if res1:
                    res.append(res1)
                res2 = []
                while deques:
                    item = deques.pop()
                    res2.append(item.val)
                    if item.left:
                        stack.append(item.left)
                    if item.right:
                        stack.append(item.right)
                if res2:
                    res.append(res2)
            return res
    

    相关文章

      网友评论

          本文标题:leetcode103.Binary Tree Zigzag L

          本文链接:https://www.haomeiwen.com/subject/vpkmlktx.html