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);
    }
}
相关推荐
vHelios3 分钟前
【电商项目】商品服务模块的问题解决与代码逻辑思考
java·sql·mybatis
rannn_1118 分钟前
【力扣hot100】238、41、73题解
java·算法·leetcode·开发
QN1幻化引擎12 分钟前
认知场的涌现动力学:结构证明、Phi度量与意识签名电池
人工智能·深度学习·神经网络·算法·机器学习·agi
今天的砖头有点烫手啊29 分钟前
Spring Boot
java·人工智能
坚持编程的菜鸟10 小时前
模拟实现memmove
c语言·算法·模拟实现memmove
码农颜10 小时前
5.4.1 锁分类
java·数据库·mysql
wabs66611 小时前
关于图论【最短路径之Dijkstra算法(堆优化版)|卡码网47.参加科学大会的思考】
数据结构·算法·图论·优先级队列·邻接表·小顶堆·卡码网
坚持编程的菜鸟11 小时前
编写判断大小端程序
c语言·算法·判断大小端
papaofdoudou11 小时前
判断排列逆序奇偶性的乘积判别法(范德蒙德符号法)
人工智能·算法
linux-hzh12 小时前
百日算法修炼 · Day 03
java·算法