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<>(),因此每次的都是最新的
        }
    }
}
相关推荐
地平线开发者11 分钟前
征程 6E/M Matrix 开发评板使用系列(一):开箱与点亮
算法·自动驾驶
Jerry28 分钟前
LeetCode 59. 螺旋矩阵 II
算法
tachibana236 分钟前
hot100 回文链表(234)
java·网络·数据结构·leetcode·链表
可编程芯片开发39 分钟前
基于FOC控制器的BLDC无刷直流电机控制系统matlab编程与仿真
算法
aaaameliaaa1 小时前
进制练习题【找出只出现一次的数字、交换两个变量(不创建临时变量)、统计二进制中1的个数、打印整数二进制的奇数位和偶数位、求两个数二进制中不同位的个数】
c语言·数据结构·笔记·算法
QiLinkOS3 小时前
第三视觉理解徐玉生与他的商业活动(28)
大数据·c++·人工智能·算法·开源协议
wabs6663 小时前
关于动态规划【力扣1143.最长公共子序列的思考】
算法·leetcode·动态规划
剑挑星河月4 小时前
54.螺旋矩阵
java·算法·leetcode·矩阵
Robot_Nav4 小时前
MPPI 局部规划器实验设计讲解
人工智能·算法·mppi
mingo_敏4 小时前
Mean-Teacher 均值教师自训练框架详解
算法·均值算法