二叉树的锯齿形层次遍历
树的层次遍历的升级版
方法一:BFS,定义depth,按照层数奇偶反转
时间复杂度为O(n) 空间复杂度为O(n)
class Solution:
def zigzagLevelOrder(self, root: TreeNode) -> List[List[int]]:
results = [] #初始化结果集合
if not root: return []
cur_level = [root] #初始化开始结点
depth = 0
while cur_level:
result =[] #保存这一层数据,便于后续的反转操作
next_level = [] #保存下一层节点
for node in cur_level:
result.append(node.val)
if node.left:
next_level.append(node.left)
if node.right:
next_level.append(node.right)
if depth%2 == 1: #按照层数关系,开始反转操作
results.append(result[::-1])
else:
results.append(result)
depth += 1 #关键步骤1
cur_level = next_level #循环关键步骤2
return results
方法二:DFS,递归调用
class Solution:
def zigzagLevelOrder(self, root: TreeNode) -> List[List[int]]:
res = []
def helper(root:TreeNode,depth):
if not root: return []
if len(res) == depth: #看res中有多少个[],站在二维数组的角度
res.append([]) #新增[]元素
if depth%2 == 0: res[depth].append(root.val) #在当前层数维度的[]后面添加元素
else :res[depth].insert(0,root.val) #在当前层数维度的[]头部插入元素
helper(root.left,depth+1) #递归调用
helper(root.right,depth+1) #递归调用
helper(root,0)
return res

浙公网安备 33010602011771号