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)
上一篇: 力扣-38-外观数组
下一篇: 力扣 13. 罗马数字转整数