欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

LeetCode103:二叉树的锯齿形层序遍历

程序员文章站 2022-05-21 08:19:59
...

该题和下面这篇文章有一定的关联:

LeetCode102 && LeetCode107:二叉树的层次遍历

目录

一、题目

二、示例

三、思路

四、代码


一、题目

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

二、示例

例如:
给定二叉树 [3,9,20,null,null,15,7],

     3
    /  \
  9   20
      /   \
   15    7
返回锯齿形层序遍历如下:

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

三、思路

1、首先,先对当前二叉树进行层序遍历,关于层次遍历的方法可点击LeetCode102 && LeetCode107:二叉树的层次遍历

2、最后,对深度depth为偶数的遍历进行翻转即可。(depth = 0, 1, 2, ...)

四、代码

# Definition for a binary tree node.
class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None

    def __repr__(self):
        return str(self.val)

class Solution:
    def zigzagLevelOrder(self, root: TreeNode):
        """
        :param root: TreeNode
        :return: List[List[int]]
        """
        stack = []
        def levelOrder(root, depth, stack):
            if not root:
                return
            if depth >= len(stack):
                stack.append([])
            stack[depth].append(root.val)
            levelOrder(root.left, depth + 1, stack)
            levelOrder(root.right, depth + 1, stack)

        levelOrder(root, 0, stack)
        for i in range(1, len(stack), 2):
            stack[i] = stack[i][::-1]
        return stack

if __name__ == '__main__':
    tree = TreeNode(3)
    tree.left = TreeNode(9)
    tree.right = TreeNode(20)
    tree.right.left = TreeNode(15)
    tree.right.right = TreeNode(7)

    s = Solution()
    ans = s.zigzagLevelOrder(tree)
    print(ans)