103. Binary Tree Zigzag Level Order Traversal
Medium
Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to right, then right to left for the next level and alternate between).
For example:
Given binary tree [3,9,20,null,null,15,7]
,
3 / \ 9 20 / \ 15 7
return its zigzag level order traversal as:
[ [3], [20,9], [15,7] ]
笔记:
方法1:按层遍历,偶数层反转list
这样做需要反转数组,耗时较多
class Solution:
def zigzagLevelOrder(self, root: TreeNode) -> List[List[int]]:
if root is None:
return None
rlt = []
nodes = [root]
level = 0
while nodes:
temp_val = []
temp_nodes = []
for node in nodes:
temp_val.append(node.val)
if node.left:
temp_nodes.append(node.left)
if node.right:
temp_nodes.append(node.right)
if level % 2 == 0:
rlt.append(temp_val)
else:
rlt.append(temp_val[::-1])
if not temp_nodes:
return rlt
level += 1
nodes = temp_nodes
方法2:先序遍历(DFS)
class Solution:
def zigzagLevelOrder(self, root: TreeNode) -> List[List[int]]:
if root is None:
return None
rlt = []
self.add_node(root, 0, rlt)
return rlt
def add_node(self, node, level, rlt):
if node is None:
return False
if len(rlt) - 1 < level:
rlt.append([])
if level % 2 == 0:
rlt[level].append(node.val)
else:
rlt[level].insert(0, node.val)
self.add_node(node.left, level + 1, rlt)
self.add_node(node.right, level + 1, rlt)