LeetCode-102-二叉树的层序遍历

题目描述:

给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。

题目链接:LeetCode-102-二叉树的层序遍历

解题思路:

使用队列 先进先出的特点存储每次遍历的节点。
代码实现:

java 复制代码
class Solution {
    List<List<Integer>> res = new ArrayList<>();
    public List<List<Integer>> levelOrder(TreeNode root) {
        if (root == null) {
            return new ArrayList<>();
        }
        bfs(root);
        return res;
    }

	// 层遍历
    private void bfs(TreeNode root){
        if (root==null){
            return;
        }

        // 使用 队列 来遍历并保存,每次记录队列的大小size,
        // 每次弹出一个,在队尾加入该节点的左右孩子,同时size--
        // 当 size=0,说明这一层就结束了,更新size,更新后的 size大小就是下一层节点的个数
        Queue<TreeNode> queue = new LinkedList<TreeNode>();
        queue.add(root);// 根节点入队列
        while (!queue.isEmpty()) {
            List<Integer> path = new ArrayList<>();// 每更新遍历一层的时候都要新建一个
            int size = queue.size();// 更新 size
            while (size>0){
                // 弹出一个
                TreeNode tmp = queue.poll();
                path.add(tmp.val);// path 记录队列弹出的元素
                // 左孩子入队列
                if (tmp.left != null) {
                    queue.add(tmp.left);
                }
                // 右孩子入队列
                if (tmp.right != null) {
                    queue.add(tmp.right);
                }
                size--;
            }
            // 出while循环说明这一层更新完了
            res.add(path);// 收获结果,不需要新建一个ArrayList<>(),因此每次的都是最新的
        }
    }
}
相关推荐
满怀冰雪几秒前
第13篇-栈算法入门-括号匹配-表达式与单调栈基础
java·算法
TCW11214 分钟前
AI底层系列:用C++实现线性代数的公式推导与算法设计-基础篇-5.矩阵方程
人工智能·线性代数·算法
叫我:松哥5 分钟前
基于机器学习和flask的体育健身风险智能分析系统,系统集成DeepSeek、聚类算法、分类算法等,准确率达90%
人工智能·python·神经网络·算法·机器学习·flask·聚类
wabs6669 分钟前
关于动态规划【0-1背包思想在实际问题中是怎么转化的?】
算法·动态规划
阿文的代码库11 分钟前
欧拉回路与欧拉路径的算法流程演示
算法
汤姆yu16 分钟前
云知声 U2 原生智能体大模型深度解析
大数据·人工智能·算法·ai·大模型·多模态·智能体
syt_biancheng22 分钟前
贪心算法(1)---简介
算法·贪心算法
小白小宋34 分钟前
【PUSCH番外篇】5G NR 相位补偿与频移校正:原理、流程与工程实现
算法·5g·matlab·信息与通信·信号处理
满怀冰雪38 分钟前
第15篇-链表基础-反转链表-合并链表与快慢指针
java·算法·链表
2zcode1 小时前
基于MATLAB语音信号变声算法设计与实现
算法·matlab·语音识别·变声算法