【算法】力扣 剑指 Offer 32. II. 从上到下打印二叉树 II


题目

从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。
在这里插入图片描述


思路

主要考察的还是层次遍历二叉树的算法,但是我觉得难点是在需要按层输出上面。
看了解析,觉得在 while 循环里嵌套一个 for 循环非常妙,一开始也有想到for循环,可是却卡在了不知道如何判断层数上。


代码实现

while 循环里嵌套的 for 循环,在一次 while 循环结束后的辅助队列中的 size() 就是当前层数的元素个数,但是如果是用从低到高的 for 循环写法,辅助队列的 size() 会变,并且也不再表示当前层数的元素个数了。所以采用从高到低的 for 循环写法,提前定死边界。

public List<List<Integer>> levelOrder(TreeNode root) {
        //创建层次遍历存储List
        List<List<Integer>> levelOrderTree = new LinkedList<>();
        //创建辅助队列
        Queue<TreeNode> bfsTree = new LinkedList<>();
        //健壮性检验
        if(root != null){
            bfsTree.offer(root);
        }
        
        while(!bfsTree.isEmpty()){
            //创建每一层的存储List
            List<Integer> bfsList = new LinkedList<>();
            //层次遍历 for循环从高到低
            for(int i = bfsTree.size();i > 0;i--){
                root = bfsTree.poll(); //获得根节点
                bfsList.add(root.val); //添加进当前层的遍历List中
                if(root.left != null){ //添加左孩子
                    bfsTree.offer(root.left);
                }
                if(root.right != null){ //添加右孩子
                    bfsTree.offer(root.right);
                }
            }
            levelOrderTree.add(bfsList); //结束一层遍历
        }

        return levelOrderTree;
    }


总结

采用从高到低的 for 循环写法,提前定死边界。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值