lintcode练习-71. 二叉树的锯齿形层次遍历

描述

给出一棵二叉树,返回其节点值的锯齿形层次遍历(先从左往右,下一层再从右往左,层与层之间交替进行) 

您在真实的面试中是否遇到过这个题?  

样例

给出一棵二叉树 {3,9,20,#,#,15,7},

    3
   / \
  9  20
    /  \
   15   7

返回其锯齿形的层次遍历为:

[
  [3],
  [20,9],
  [15,7]
]

实现代码:
思路:

从题目描述也可以清楚的看出,采用二叉树的层次遍历最好解决,在每一层加上一个翻转。

代码:
"""
Definition of TreeNode:
class TreeNode:
    def __init__(self, val):
        self.val = val
        self.left, self.right = None, None
"""
class Solution:
    """
    @param root: A Tree
    @return: A list of lists of integer include the zigzag level order traversal of its nodes' values.
    """
    def zigzagLevelOrder(self, root):
        # write your code here
        self.results = []
        if not root:
            return self.results
        q = [root]
        flag = 0
        while q:
            new_q = []
            flag += 1
            if flag % 2 != 0:
                self.results.append([n.val for n in q])
            else:
                self.results.append([n.val for n in reversed(q)])
            for node in q:
                if node.left:
                    new_q.append(node.left)
                if node.right:
                    new_q.append(node.right)
            q = new_q
        return self.results

猜你喜欢

转载自blog.csdn.net/qq_36387683/article/details/80960237