【剑指offer】分行从上到下打印二叉树,层次遍历,每一层在一行输出

版权声明:本文为博主原创文章,未经博主允许不得转载。 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]

猜你喜欢

转载自blog.csdn.net/weixin_36372879/article/details/83994160