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]
]
跟层序遍历差不多,只是隔一行倒过来一次。
还是使用BFS方法,用tempnode存储每一层的节点,用forward来判断这层list是正还是倒着,final存储最终结果。
思路和方法都是比较简单的。
class Solution:
def zigzagLevelOrder(self, root: TreeNode) -> List[List[int]]:
if not root: return root
bfs=[root]
final=[]
forward=True
while bfs:
tempnode=[]
tempval=[node.val for node in bfs]
if forward:
final.append(tempval)
else:
final.append(tempval[::-1])
for node in bfs:
if node.left:
tempnode.append(node.left)
if node.right:
tempnode.append(node.right)
forward = not forward
bfs=tempnode
return final