102.二叉树的层序遍历——二叉树专题复习

迭代方式:

java 复制代码
class Solution {
    // 定义一个成员变量res来存储层序遍历的结果
    List<List<Integer>> res = new ArrayList<>();
    
    // levelOrder方法是层序遍历的接口,它接受一个二叉树的根节点root
    public List<List<Integer>> levelOrder(TreeNode root) {
        // 如果根节点为空,则层序遍历的结果为空列表
        if (root == null) return res;
        
        // dfs方法是一个递归方法,用于执行深度优先搜索
        dfs(root, 0); // 初始调用,level为0,代表第一层
        
        // 返回存储层序遍历结果的列表res
        return res;
    }
    
    // dfs方法是递归函数,用于遍历二叉树的每一层
    // root表示当前遍历到的节点,level表示当前的层级
    public void dfs(TreeNode root, int level) {
        // 如果当前节点为空,则直接返回
        if (root == null) return;
        
        // 如果当前层还没有被访问过,则创建一个新的列表来存储该层的数据
        if (level == res.size()) res.add(new ArrayList<Integer>());
        
        // 将当前节点的值添加到对应层级的列表中
        res.get(level).add(root.val);
        
        // 递归遍历左子树,层级加1
        dfs(root.left, level + 1);
        
        // 递归遍历右子树,层级加1
        dfs(root.right, level + 1);
    }
}

递归方式:

java 复制代码
class Solution {
    // 定义一个成员变量res来存储层序遍历的结果
    List<List<Integer>> res = new ArrayList<>();
    
    // levelOrder方法是层序遍历的接口,它接受一个二叉树的根节点root
    public List<List<Integer>> levelOrder(TreeNode root) {
        // 如果根节点为空,则层序遍历的结果为空列表
        if (root == null) return res;
        
        // dfs方法是一个递归方法,用于执行深度优先搜索
        dfs(root, 0); // 初始调用,level为0,代表第一层
        
        // 返回存储层序遍历结果的列表res
        return res;
    }
    
    // dfs方法是递归函数,用于遍历二叉树的每一层
    // root表示当前遍历到的节点,level表示当前的层级
    public void dfs(TreeNode root, int level) {
        // 如果当前节点为空,则直接返回
        if (root == null) return;
        
        // 如果当前层还没有被访问过,则创建一个新的列表来存储该层的数据
        if (level == res.size()) res.add(new ArrayList<Integer>());
        
        // 将当前节点的值添加到对应层级的列表中
        res.get(level).add(root.val);
        
        // 递归遍历左子树,层级加1
        dfs(root.left, level + 1);
        
        // 递归遍历右子树,层级加1
        dfs(root.right, level + 1);
    }
}
相关推荐
聪明的笨猪猪32 分钟前
Java 工程案例:AI 生成 @Async 异步线程池踩坑
java·经验分享·面试·ai编程
学长毕设1 小时前
基于SpringBoot公务员考试交流平台-附源码
java·spring boot·后端
好悬给我拽开线2 小时前
ZILOT 论文解析
算法
SL_staff3 小时前
私有化低代码:面向强监管行业的可控数字化实践
java·低代码
饮水桶_T3 小时前
JAVA IO流笔记
开发语言·数据结构·算法
三翼鸟数字化技术团队4 小时前
高性能存储引擎RocksDB:原理与Java生态实践
java
SL_staff4 小时前
JVS-APS有限产能建模的七个刚性支点:面向产线真实约束的技术实现解析
java·开源·全栈
特立独行的猫A4 小时前
少 3 个环节、少 1 次 ABI、少 3500 行代码:cj-tauri 与 Ionic/Capacitor 的鸿蒙桥接机制对比
java·后端·python
星夜离尘564 小时前
MATLAB 离散数据分箱:半开区间、末端点与计数、加权和、平均
算法·matlab
Pniubi4 小时前
力扣76.最小覆盖子串
算法·leetcode·职场和发展