大厂面试大概率会问的二叉树的层序遍历

一个炎炎烈日的午后,小编正坐在一台一开机就像有千万台拖拉机呼啸而过的笔记本电脑前准备写码。
回头看了看女朋友好像要出去逛街

女朋友:好好在家复习面试。
小编:好嘞。

== 十分钟后 ==
只听门叮咣一声,感觉是女朋友出去了。此时小编默默的关掉了idea,双击了LOL,准备开一把黑
刚要输入密码,突然脖子后面感觉一股凉意袭来…。

身后传来的一阵阴森恐怖的声音。
准备开几把呀。
笔者就顺嘴回了一句,先来两把,随后就感觉不对劲
之后。XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
此时的小编想说:人和人之间连最基本的信任都没有了吗?

之后小编就在女朋友温柔的目光注释下,开始了一个一个的二叉树之旅

本篇咱们一起先聊一聊 二叉树的层序遍历



首先大家要知道,二叉树的层序遍历就是将二叉树的节点value一层一层的输出(下图是小编自己画的二叉树,虽丑,但有灵魂)它的层序遍历结果是:[[35],[19,49],[15,23,51],[53]]
在这里插入图片描述

  • 首先我们想,既然是一层一层的遍历,那么我们就可以先将第一层的节点放入一个List(下称levelList)中。
    在这里插入图片描述
  • 然后取出这个levelList中的所有节点,这就是第一层的节点,然后依次判断levelList中的所有节点的左右子节点是否为空,不为空的话,就将其插入到一个临时list中,然后清空levelList,将临时list中的节点add到levelList中,以此类推。
    在这里插入图片描述

之后就是真正的技术了

  • 首先最基础的先构建一个二叉树类
public class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;
        TreeNode(int x) { val = x; }
}
  • 之后就是进行层序遍历
        public List<List<Integer>> levelOrder(TreeNode root) {
            if(root == null){
                return new ArrayList<List<Integer>>();
            }

            List<List<Integer>> result = new ArrayList<List<Integer>>(); //最终结果

            List<TreeNode> level = new ArrayList<TreeNode>(); //每一层的节点
            level.add(root);

            while (level != null && !level.isEmpty()) {//如果下一层有值的情况下才进行遍历
                Iterator<TreeNode> iterator = level.iterator();
                List<Integer> levelVal = new ArrayList<Integer>();//每一层节点的值
                List<TreeNode> levelTemp = new ArrayList<TreeNode>();//用于临时存放下一层的节点,在删除level之后,统一add进level
                while (iterator.hasNext()){
                    TreeNode tempTreeNode = iterator.next();
                    levelVal.add(tempTreeNode.val);
                    iterator.remove();
                    if(tempTreeNode.left != null){
                        levelTemp.add(tempTreeNode.left);
                    }
                    if(tempTreeNode.right != null){
                        levelTemp.add(tempTreeNode.right);
                    }
                }
                result.add(levelVal);
                level.addAll(levelTemp);
            }

            return result;
        }
  • 运行的结果,原二叉树就不给大家
[[35],[19,49],[15,23,51],[53]]

今天就到这了,小编要陪女朋友一起出去逛街了——!——

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云下牧羊人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值