给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
原思路(错误的):
*)忽略了DFS只能决定 当前节点下一层的遍历顺序, 不能决定本层的所有节点遍历顺序,所以需要用到双向列表的数据结构。
from collections import deque
a)用DFS + level 的方法进行BFS遍历
b)通过 level%2 == 0 来判断应该 helper(node.left,level) 和 helper(node.right,level) 两个谁先
更正:
*)本题保存了,作为树的练习,以后多刷几次。
from collections import deque
class Solution:
def zigzagLevelOrder(self, root: TreeNode) -> List[List[int]]:
res = []
def helper(node,level):
if not node:
return
if level == len(res):
res.append(deque([]))
if level%2 == 1:
res[level].appendleft(node.val)
elif level%2 == 0:
res[level].append(node.val)
helper(node.left,level+1)
helper(node.right,level+1)
helper(root,0)
new_res = []
for list_ in res:
new_res.append([val for val in list_])
return new_res