一、要求
从上往下打印出二叉树的每个节点,同层节点从左至右打印。相当于深度优先按层遍历, 中间需要队列做转存。
二、思路及代码
广度优先搜索,用一个队列进行存贮,从左到右,pop一个就print一个,并把这个节点的左右子节点排队到最后。另一个队列一直append要输出的值。
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
def solution(node):
if not node:
return node
list1=[node]
result=[]
while list1!=[]:
currentnode=list1.pop(0)
result.append(currentnode.val)#result需要append的是val,不是节点
if currentnode.left:
list1.append(currentnode.left)
if currentnode.right:
list1.append(currentnode.right)
return result
#################
pNode1 = TreeNode(1)
pNode2 = TreeNode(2)
pNode3 = TreeNode(3)
pNode4 = TreeNode(4)
pNode5 = TreeNode(5)
pNode6 = TreeNode(6)
pNode7 = TreeNode(7)
pNode1.left = pNode2
pNode1.right = pNode3
pNode2.left = pNode4
pNode2.right = pNode5
pNode3.left = pNode6
pNode3.right = pNode7
print(solution(pNode1))
三、运行结果
[1, 2, 3, 4, 5, 6, 7]
四、思考与总结
可以用list辅助实现广度优先