版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_36372879/article/details/83994160
与上一篇博客层次遍历二叉树不同,这次是需要将每一层打印在同一行,这就需要判断每一层的元素:
注意到,将每一层打印完了之后,下面的一层也全部进入到了队列,因此采用一个计数器:nextLevel来计算下一层的个数,使用toBeList计算这层还么有打印完的个数
初始nextLevel = 0, toBeList = 1,之后每次放入一个队列,nextLevel+1,每次出一个队列,toBeList-1,知道toBeList为0之后,就说明这层的打印完了,同时下一层已经计数了
if toBeList == 0:
results.append(result)
result = []
toBeList = nextLevel
nextLevel = 0
代码:
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution:
# 返回从上到下每个节点值列表,例:[1,2,3]
def PrintFromTopToBottom(self, root):
# write code here
list = [] #队列
result = [] #每一层的结果
results = [] #存储result的list
nextLevel = 0
toBeList = 1 #这层还需要加入result的元素个数
if root == None:
return list
list.append(root)
while list != []:
treeNode = list.pop(0)
toBeList -= 1
result.append(treeNode.val)
if treeNode.left:
nextLevel += 1
list.append(treeNode.left)
if treeNode.right:
nextLevel += 1
list.append(treeNode.right)
if toBeList == 0:
results.append(result)
result = []
toBeList = nextLevel
nextLevel = 0
return results
测试:
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.right.left = TreeNode(5)
root.right.right = TreeNode(6)
results = Solution().PrintFromTopToBottom(root)
for i in results:
print(i)
结果:
[1]
[2, 3]
[4, 5, 6]