描述
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
例如:
给定的二叉树是{1,2,3,#,#,4,5}
该二叉树多行打印层序遍历的结果是[[1],[2,3],[4,5]]
这道题直接套用上面那道题的答案,也是可以的,把偶数层的反向输出改成正向输出。
还有就是层次遍历,不过是按行输出。层次遍历剑指有很多题都出现了。
题解来自:https://blog.nowcoder.net/n/55dd3a5afd1a41cb9a007bbfa5232550?f=comment
- 维护一个队列,每次只保存当前层的结点
- 通过两个左右指针,对每一层的遍历从左指针遍历到右指针,同时收集结果
- 对每个结点,如果有子节点,则按顺序加入左右子节点到队列,为下一层遍历做准备
class Solution:
# 返回二维列表[[1,2],[4,5]]
def Print(self, pRoot):
# write code here
if not pRoot:
return []
# 层次遍历
result = []
# 借助队列实现
que = []
que.append(pRoot)
temp = pRoot
# 遍历每一层
while len(que)>0:
sz = len(que)
ans = []
# 遍历当前层每个结点
for i in range(sz):
node = que[0]
ans.append(node.val)
que.pop(0)
if node.left :
que.append(node.left)
if node.right :
que.append(node.right)
result.append(ans)
return result
时间复杂度 O(MN):M为树的层数,N为每一层的结点数
空间复杂度 O(N):借助队列实现