[Leetcode]Binary Tree Zigzag Level Order Traversal

来源:互联网 发布:国家药监局数据库 编辑:程序博客网 时间:2024/04/29 15:00

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,#,#,15,7},

    3   / \  9  20    /  \   15   7

return its zigzag level order traversal as:

[  [3],  [20,9],  [15,7]]
和Binary Tree Level Order Traversal类似,也是树的层序遍历,只不过是在偶数层自左向右遍历,奇数层自右向左遍历~可以直接在Binary Tree Level Order Traversal的代码上做改进,把奇数层的结果数列reverse一下~或者用下面这种解法也是可以的~同时维护两个栈,一个栈用来读取,一个栈用来存放下一层的节点

class Solution:    # @param root, a tree node    # @return a list of lists of integers    def zigzagLevelOrder(self, root):        if root is None: return []        cur, res, vals = [root], [], [root.val]        while cur:            res.append(vals)            next, vals = [], []            while cur:                node = cur.pop()                if len(res) % 2 == 0:                    if node.left:                        vals.append(node.left.val)                        next.append(node.left)                    if node.right:                        vals.append(node.right.val)                        next.append(node.right)                else:                    if node.right:                        vals.append(node.right.val)                        next.append(node.right)                    if node.left:                        vals.append(node.left.val)                        next.append(node.left)            cur = next        return res



0 0
原创粉丝点击