题目描述:从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
思路:本题实际上就是层序遍历,但是要点在于如何在做到不同行结点分开。这里考虑的是采用三个列表。保证nodelist只保存上一行结点。遍历nodelist中结点,将其左右孩子依次存入curnodelist中。遍历结束将curnodelist加入nodelist,并删除nodelist中第一个元素,即上一行结点。
class Solution:
# 返回二维列表[[1,2],[4,5]]
def Print(self, pRoot):
# write code here
nodelist = []
outlist = []
if pRoot:
# nodelist中永远只有一个元素,这唯一的元素一定是一个包含某一层结点的列表
nodelist.append([pRoot])
else:
return outlist
while len(nodelist) and len(nodelist[0]):
outlist.append([node.val for node in nodelist[0]])
curnodelist = []
# 遍历上一层结点,记录下一层结点,存入一个新的列表中
for i in range(len(nodelist[0])):
curnode = nodelist[0][i]
if curnode.left:
curnodelist.append(curnode.left)
if curnode.right:
curnodelist.append(curnode.right)
# 更新保存上一层结点的列表
nodelist.append(curnodelist)
del nodelist[0]
return outlist
测试二叉树结构:
![二叉树](https://img-blog.csdn.net/20180702175730219?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzIwMTQxODY3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70) 输出结果:
[[4], [2, 6], [3, 5, 7], [1]]