hot100-39二叉树层序遍历

一、题目

二叉树的层序遍历。

二、思路

1)先处理特殊情况,root==null

2)使用一个队列,先加入根节点root,用队列的长度控制循环。

3)每次循环新创建一个list(新的一层),通过长度n控制for循环。

4)弹出队列中的节点,将对应的值加入list,并将其左右子节点加入queue。

三、代码

复制代码
class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
        if(root == null) return new ArrayList<>();
        List<List<Integer>> res = new ArrayList<>();
        Queue<TreeNode> queue = new LinkedList<>();
        queue.offer(root);
        while(!queue.size().isEmpty){
            List<Integer> list = new ArrayList<>();
            int n = queue.size();
            for(int i = 0;i<n;i++){
                TreeNode node = queue.poll();
                list.add(node.val);
                if(node.left != null) queue.offer(node.left);
                if(node.right != null) queue.offer(node.right);
            }
            res.add(list);
        }
        return res;
    }
}

四、语法

1、Queue<TreeNode> queue = new LinkedList<>(); 声明Queue类型的引用变量queue,并用LinkedList实例化。

LinkedList 实现了 Queue 接口,支持高效的 尾进头出 操作(O(1))

2、queue.offer(root); 将元素加入队列尾部,入队

等价于queue.add(root);

3、queue.poll(); 从队列头部移除并返回元素,出队

队列为空时,返回null

相关推荐
leiming617 小时前
C++ vector容器
开发语言·c++·算法
Xの哲學18 小时前
Linux流量控制: 内核队列的深度剖析
linux·服务器·算法·架构·边缘计算
yaoh.wang18 小时前
力扣(LeetCode) 88: 合并两个有序数组 - 解法思路
python·程序人生·算法·leetcode·面试·职场和发展·双指针
LYFlied19 小时前
【每日算法】 LeetCode 56. 合并区间
前端·算法·leetcode·面试·职场和发展
艾醒19 小时前
大模型原理剖析——多头潜在注意力 (MLA) 详解
算法
艾醒19 小时前
大模型原理剖析——DeepSeek-V3深度解析:671B参数MoE大模型的技术突破与实践
算法
jifengzhiling20 小时前
零极点对消:原理、作用与风险
人工智能·算法
鲨莎分不晴21 小时前
【前沿技术】Offline RL 全解:当强化学习失去“试错”的权利
人工智能·算法·机器学习
XFF不秃头1 天前
力扣刷题笔记-全排列
c++·笔记·算法·leetcode