LeetCode Hot100 102. 二叉树的层序遍历

本文介绍了一种实现二叉树层次遍历的方法,并详细解释了如何通过队列记录每一层节点信息的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

分析: 1.首先(利用队列)写出二叉树的层次遍历
            2.在此基础上存储每一层的元素信息

public static void levelOrder (TreeNode root) {
        if(node==null) return;//空节点不做操作
        Queue<TreeNode> queue = new LinkedList<TreeNode>();//创建队列
        queue.offer(root);//存入根节点
        while (!queue.isEmpty()) {//如果队列不空,也就是这个树没遍历完,就一直进行
            node = queue.poll();//出队当前的根节点
            System.out.print(node.val+ " ");//打印该节点信息
            if (node.left!= null) queue.offer(node.left);//如果有左孩子,那么左孩子进队
            if (node.right!= null) queue.offer(node.right);//如果有右孩子,那么右孩子进队
}

但是这样做只能是按照层次遍历的顺序输出每个节点的信息,并不能根据每个节点属于哪个层次来存储节点信息。
所以需要在此基础上增加一些操作来保存每一层次有哪些节点。
 

我们知道,while每执行一次,就表示这一层已经遍历完,下次执行while就是遍历下一层,
所以可以:

        1.把每一轮(每一层)遍历到的节点都存储到tempList中;

        2.在每一次while执行到最后一行的时候存储这层所有的信息也就是把list(临时的层次存储集合)加入到res(总结果的存储集合)中:res.add(list);

    List<List<Integer>> res = new ArrayList();
    public List<List<Integer>> levelOrder(TreeNode root) {
        Queue<TreeNode> queue = new LinkedList<TreeNode>();
        if(root ==null) {
            return res;
        }
        queue.offer(root);//当根结点不为空时,就将根结点入队列
        while(!queue.isEmpty()){
            List<Integer> list = new ArrayList();
            int count =queue.size();//每一层元素的个数
            for(int i = 0; i < count;i++){
                TreeNode node = queue.poll();//弹出队首元素,并将队首元素赋值给head
                list.add(node.val);//存到list
                if(node.left!=null){
                    queue.offer(node.left);
                }
                if(node.right!=null){
                    queue.offer(node.right);
                }
            }
            res.add(new ArrayList(list));
        }
        return res;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值