力扣 102二叉树的层序遍历(广度优先搜索)

我们可以想到最朴素的方法是用一个二元组 (node, level) 来表示状态,它表示某个节点和它所在的层数,每个新进队列的节点的 level 值都是父亲节点的 level 值加一。

java 复制代码
class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
//返回每一层节点值组成的二维列表
        List<List<Integer>> ret = new ArrayList<List<Integer>>();
        
        if (root == null) {
            return ret;
        }

        Queue<TreeNode> queue = new LinkedList<TreeNode>();
        // 将根节点入队,作为BFS搜索起点
        queue.offer(root);

        // while循环:队列不为空,说明还有节点没有遍历
        while (!queue.isEmpty()) {
            // level:临时存放【当前这一层】所有节点的值
            List<Integer> level = new ArrayList<Integer>();
            // 记录当前层的节点数量,重点!for循环只处理这一层的节点
            int currentLevelSize = queue.size();
            // for循环:循环currentLevelSize次,逐个取出当前层节点
            for (int i = 1; i <= currentLevelSize; ++i) {
                TreeNode node = queue.poll();
                level.add(node.val);
                
                if (node.left != null) {
                    queue.offer(node.left);
                }
                if (node.right != null) {
                    queue.offer(node.right);
                }
            }
            ret.add(level);
        }
        return ret;
    }
}
相关推荐
一去不复返的通信er1 小时前
力扣15:盛最多水的容器
算法·leetcode
Navigator_Z1 小时前
LeetCode //C - 1309. Decrypt String from Alphabet to Integer Mapping
c语言·算法·leetcode
文丑颜不良啊2 小时前
LeetCode1281~1300题目解析
java·leetcode
旖旎夜光3 小时前
LCR 170:交易逆序对的总数(归并排序) —— 题解
c++·学习·算法·leetcode·排序算法
圣保罗的大教堂17 小时前
leetcode 3619. 总价值可以被 K 整除的岛屿数目 中等
leetcode
文丑颜不良啊1 天前
LeetCode1141~1160题目解析
java·leetcode
木井巳1 天前
【动态规划: 路径问题】下降路径最小和
java·算法·leetcode·动态规划·推荐算法
ynchyong1 天前
培养程序化思维
leetcode·程序化思维·刷题经验
YLCHUP1 天前
【模拟&STL】题解:AT_abc203_e [ABC203E] White Pawn_基础算法_数据结构_STL模板库_AtcoderABC_C++算法竞赛
数据结构·c++·算法·leetcode·动态规划·哈希算法·近邻算法