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

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

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)

猜你喜欢

转载自blog.csdn.net/weixin_45666660/article/details/111506494