美文网首页leetcode
二叉树的锯齿形层次遍历

二叉树的锯齿形层次遍历

作者: momo1023 | 来源:发表于2018-09-11 16:21 被阅读4次

    给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。

    给定二叉树 [3,9,20,null,null,15,7],
    
        3
       / \
      9  20
        /  \
       15   7
    返回锯齿形层次遍历如下:
    
    [
      [3],
      [20,9],
      [15,7]
    ]
    

    层次遍历采用队列实现:
    锯齿层次遍历只是在标准层次遍历的基础上添加一个flag用以输出控制方向(即是否需要逆序):

    # Definition for a binary tree node.
    # class TreeNode:
    #     def __init__(self, x):
    #         self.val = x
    #         self.left = None
    #         self.right = None
    
    class Solution:
        def zigzagLevelOrder(self, root):
            """
            :type root: TreeNode
            :rtype: List[List[int]]
            """
            if root is None:
                return []
            res = []
            queue = [root]
            flag = 1
            while queue:
                length = len(queue)
                temp = []
                for i in range(length):
                    node = queue.pop(0)
                    temp.append(node.val)
                    if node.left:
                        queue.append(node.left)
                    if node.right:
                        queue.append(node.right)
                if flag == -1:
                    temp = temp[::-1]
                res.append(temp)
                flag *= -1
            return res
    

    相关文章

      网友评论

        本文标题:二叉树的锯齿形层次遍历

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