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

在这里插入图片描述
与上一篇博客层次遍历二叉树不同,这次是需要将每一层打印在同一行,这就需要判断每一层的元素:
注意到,将每一层打印完了之后,下面的一层也全部进入到了队列,因此采用一个计数器: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]
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值