2024.2.14力扣每日一题——二叉树的层序遍历

2024.2.14

      • 题目来源
      • 我的题解
        • [方法一 递归实现(前序遍历+记录深度)](#方法一 递归实现(前序遍历+记录深度))
        • [方法二 非递归实现(队列)](#方法二 非递归实现(队列))

题目来源

力扣每日一题;题序:102

我的题解

方法一 递归实现(前序遍历+记录深度)

在递归遍历时记录节点所在的深度,然后把值加入到对应的深度的链表中。并利用List的set方法更新对应层次的元素List
时间复杂度 :O(n)。遍历所有节点
空间复杂度:O(n)。递归空间的大小

java 复制代码
public List<List<Integer>> levelOrder(TreeNode root) {
    List<List<Integer>> res=new ArrayList<>();
    if(root==null)
        return res;
    levelOrder1(root,0,res);
    return res;
}
public void levelOrder1(TreeNode root,int level,List<List<Integer>> res){
    if(root==null)
        return ;
    // 已经遍历过的层次
    if(res.size()>level){
        List<Integer> list=res.get(level);
        list.add(root.val);
        res.set(level,list);
    // 还未遍历的层次 
    }else{
        List<Integer> list=new ArrayList<>();
        list.add(root.val);
        res.add(list);
    }
    levelOrder1(root.left,level+1,res);
    levelOrder1(root.right,level+1,res);
}
方法二 非递归实现(队列)

利用队列的先进先出的特性,将每一行的节点从左到右存入队列中,然后以此取出进行遍历,再加入相应的子节点。
时间复杂度:O(n)。需要遍历所有节点

空间复杂度:O(n)。队列需要的空间

java 复制代码
public List<List<Integer>> levelOrder(TreeNode root) {
    List<List<Integer>> res=new ArrayList<>();
    if(root==null)
        return res;
    Queue<TreeNode> queue=new LinkedList<>();
    queue.offer(root);
    while(!queue.isEmpty()){
        int sz=queue.size();
        List<Integer> temp=new ArrayList<>();
        for(int i=0;i<sz;i++){
            TreeNode t=queue.poll();
            temp.add(t.val);
            if(t.left!=null)
                queue.offer(t.left);
            if(t.right!=null)
                queue.offer(t.right);
        }
        res.add(temp);
    }
    return res;
}

有任何问题,欢迎评论区交流,欢迎评论区提供其它解题思路(代码),也可以点个赞支持一下作者哈😄~

相关推荐
silvamux_几秒前
10款模型写种草笔记:可发布性、返工来源与成本数据缺口复盘
java·数据库·笔记
行走的陀螺仪27 分钟前
【转型攻略】2026 年,后端 / 全栈工程师转 AI Agent 方向:能力地图、按周学习路线与面试要点
人工智能·面试·职场和发展
步行cgn1 小时前
StringHttpMessageConverter 详解:Spring MVC 中字符串读写的默认转换器
java·spring·mvc
摇滚侠1 小时前
《On Java 中文版 基础卷》阅读笔记 实现隐藏 11
java·笔记·python
小蒜学长1 小时前
基于Spring Boot+Vue3的在线医疗咨询系统的设计与实现(代码+数据库+LW)
java·spring boot·后端·在线问诊·在线医疗咨询系统
Deng桑1 小时前
SpringAI写第一个Agent-把工单循环跑起来
java·agent·工具调用·spring ai
小蒋观天下1 小时前
雷击与浪涌防护:前端SPD选型、接地网误区,接地不当反而引入干扰
深度学习·算法·机器学习
WBluuue3 小时前
数据结构与算法:分块(一):块状数组、块状链表
数据结构·c++·算法·链表
圣保罗的大教堂3 小时前
leetcode 3619. 总价值可以被 K 整除的岛屿数目 中等
leetcode