【LeetCode】102.二叉树的层序遍历

题目

https://leetcode.cn/problems/binary-tree-level-order-traversal/description/

思路

  1. 边界处理:根节点为空则直接返回空列表

  2. 队列初始化:创建队列,将根节点入队

  3. 逐层遍历:循环处理直到队列为空

    • 记录当前队列长度(即当前层节点数)
    • 创建当前层的值列表
    • 循环取出当前层所有节点:
      • 节点值加入当前层列表
      • 左右子节点(不为空)加入队列供下一层使用
    • 将当前层列表加入结果集
  4. 返回结果

核心:利用队列的先进先出特性,通过记录每层节点数量来控制分层输出。

code

java 复制代码
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
        List<List<Integer>> result = new LinkedList();
        Deque<TreeNode> deque = new LinkedList();
        if(root == null) return result;
        deque.offer(root);
        //队不为空
        while(deque.isEmpty()==false){
            List<Integer> list = new ArrayList<>();
            int nodeNum = deque.size();
            while(nodeNum>0){

                TreeNode node=deque.poll();
                nodeNum--;
                list.add(node.val);
                if(node.left !=null){
                    deque.offer(node.left);
                }
                if(node.right!=null){
                    deque.offer(node.right);
                }
                
            }
            result.add(list);

        }

         return result;
    }
}
相关推荐
Full Stack Developme21 小时前
Java LRU 与 LFU 算法及应用
java·开发语言·算法
Jerry1 天前
LeetCode 707. 设计链表
算法
C语言小火车1 天前
C++ 堆排序深度精讲:基于完全二叉树的选择排序进化,最坏情况 O(n log n) 的稳定王者
开发语言·c++·算法·排序算法·堆排序
kebidaixu1 天前
两轮BMS AFE SH367306 I2C 读写时序
算法
智能排队系统_头部供应商1 天前
RK3588边缘网关改造银行排队系统实战
算法
东方佑1 天前
临界分词的存在性与最优性:从统计临界态到神经语言模型的双语实证检验
人工智能·算法·语言模型
Fabarta1 天前
从 0 实现 ChatGPT 风格的流式对话 UI
算法·架构
手写码匠1 天前
手写 AI 上下文压缩系统:从零实现 Prompt 压缩与选择性上下文管理
人工智能·深度学习·算法·aigc
EAI-Robotics1 天前
机器人操作鲁棒性:当机械手遇上真实世界的不确定性
人工智能·算法·机器人