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);
    }
}
相关推荐
xiaoye37082 分钟前
Spring 事务传播机制 + 隔离级别
java·后端·spring
YaraMemo2 分钟前
一文带你区分全局最优解和帕累托最优解
算法·5g·信息与通信·信号处理
白夜111711 分钟前
C++(标签派发 Tag Dispatching)
开发语言·c++·笔记·算法
Arya_aa16 分钟前
数据字典模块–JSR303参数校验
java
YaraMemo40 分钟前
数学优化问题中的三大转化:多目标转化为单目标,多变量转化为单变量,有约束转化为无约束
人工智能·算法·5g·信息与通信·信号处理
Ailan_Anjuxi44 分钟前
【附Python源码】使用minGPT训练自己的小型GPT语言模型
算法
明月(Alioo)1 小时前
给 AI Agent 装上“大脑“:Java语言中Code Interpreter 的设计与实现
java·ai·agent
QuZero1 小时前
StampedLock Mechanism
java·算法
Javatutouhouduan1 小时前
Java小白如何快速玩转Redis?
java·数据库·redis·分布式锁·java面试·后端开发·java程序员
xuhaoyu_cpp_java1 小时前
Spring学习(一)
java·经验分享·笔记·学习·spring