题目描述
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
思路
类似BFS,只不过需创建几个列表,来保存当前层和下一层的结果
- 将根节点放入队列
- 遍历队列,将队列中结点的值依次放进当前层列表中
- 按照队列结点的顺序依次将他们的左右孩子放进下一层列表中
- 下一层的列表赋值给队列,使循环继续
- 直到队列中没有结点
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
# 返回二维列表[[1,2],[4,5]]
def Print(self, pRoot):
# write code here
if not pRoot:
return []
res=[]
queue=[pRoot]
while queue:
curlevel=[]
nextlevel=[]
for node in queue:
curlevel.append(node.val)
if node.left:
nextlevel.append(node.left)
if node.right:
nextlevel.append(node.right)
res.append(curlevel)
queue=nextlevel
return res
测试用例
if __name__=='__main__':
s=Solution()
# 构建二叉树
root=TreeNode(1)
node1=TreeNode(2)
node2=TreeNode(3)
node3=TreeNode(4)
node4=TreeNode(5)
node5=TreeNode(6)
node6=TreeNode(7)
root.left=node1
root.right=node2
node1.left=node3
node1.right=node4
node2.left=node5
node2.right=node6
node3.left=node3.right=node4.left=node4.right=node5.left=node5.right=node6.left=node6.right=None
# 调用函数
print(s.Print(root))