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);
    }
}
相关推荐
X journey41 分钟前
机器学习进阶(13):支持向量机SVM
算法·机器学习·支持向量机
Tigshop开源商城1 小时前
『订单税率+收货地址校验国家字段』功能上新|跨境运营更高效,Tigshop开源商城系统 JAVA v5.8.23 版本更新
java·开源商城系统·tigshop
洛水水1 小时前
【力扣100题】30.二叉树的直径
算法·leetcode·职场和发展
REDcker1 小时前
C++变量存储与ELF段布局详解 从const全局到rodata与nm_readelf验证实践
java·c++·面试
gihigo19982 小时前
Bezier曲线曲面生成算法
算法
kobesdu2 小时前
【ROS2实战笔记-19】ROS2 生命周期节点的启动顺序、状态转换陷阱与热备方案
java·前端·笔记·机器人·ros·ros2
平行侠2 小时前
024多精度大整数 - 突破硬件精度限制的任意精度运算
数据结构·算法
neo_Ggx233 小时前
Maven 版本管理详解:SNAPSHOT、Release 与 Nexus 仓库的区别和影响
java·maven
matlabgoodboy3 小时前
软件开发定制小程序APP帮代做java代码代编写C语言设计python编程
java·c语言·小程序
IronMurphy3 小时前
【算法四十五】139. 单词拆分
算法