当前位置: 首页 > news >正文

LeetCode 解题思路 19(Hot 100)

在这里插入图片描述

解题思路(递归):

  1. 终止条件: 若节点为空,返回深度0。
  2. 递归步骤: 分别计算左子树和右子树的最大深度,取较大者并加1(当前节点)。

Java代码:

class Solution {
    public int maxDepth(TreeNode root) {
        if (root == null) return 0;
        return Math.max(maxDepth(root.left) + 1, maxDepth(root.right) + 1);
    }
}

复杂度分析:

  • 时间复杂度: ​O(n), 需访问每个节点一次。
  • 空间复杂度: 递归调用栈的深度取决于树的高度 h,最坏情况(树为链表)空间复杂度为 ​O(n),平衡树时为 ​O(log n)。

解题思路(BFS):

  1. 层次遍历: 逐层处理节点,每处理一层深度加1。若节点为空,返回深度0。
  2. 队列实现: 利用队列存储当前层所有节点,循环处理直至队列为空。

Java代码:

class Solution {
    public int maxDepth(TreeNode root) {
        if (root == null) return 0;
        Queue<TreeNode> queue = new LinkedList<>();
        queue.offer(root);
        int depth = 0;
        while (!queue.isEmpty()) {
            depth++;
            int levelSize = queue.size();
            for (int i = 0; i < levelSize; i++) {
                TreeNode node = queue.poll();
                if (node.left != null) queue.offer(node.left);
                if (node.right != null) queue.offer(node.right);
            }
        }
        return depth;
    }
}

复杂度分析:

  • 时间复杂度: ​O(n), 需访问每个节点一次。
  • 空间复杂度: 队列最多存储一层节点,最坏情况(完全二叉树)空间复杂度为 ​O(n)。

在这里插入图片描述

解题思路(递归):

  1. 终止条件: 当前节点为空时返回 null,当前节点没有子树时返回当前节点。
  2. 递归步骤: 递归翻转左子树和右子树,然后交换当前节点的左子节点和右子节点。

Java代码:

class Solution {
    public TreeNode invertTree(TreeNode root) {
        if (root == null) return null;
        if (root.left == null && root.right == null) return root;

        TreeNode left = invertTree(root.left);
        TreeNode right = invertTree(root.right);

        root.left = right;
        root.right = left;

        return root;
    }
}

复杂度分析:

  • 时间复杂度: ​O(n),需访问每个节点一次。
  • 空间复杂度: 递归调用栈的深度为树的高度 h,最坏情况(链状树)空间复杂度为 ​O(n)。

相关文章:

  • 轨迹规划:基于查找的(search-based)路径规划算法
  • Python集合
  • 如何使用MySQL快速定位慢SQL问题?企业级开发中常见业务场景中实际发生的例子。(一)
  • 【AI知识管理系统】(一)AI知识库工具测评
  • yolo模型学习笔记——1——物体检测评估指标
  • C语言中的结构体指针
  • 轻量高效,掌控万物——MQTT协议漫谈
  • AutoGen :使用 Swarm 构建自治型多智能体团队
  • 词频统计 ccf-csp 2024-2-1
  • 如何对一个无序单链表排序
  • XSS漏洞靶场---(复现)
  • 设计模式-对象创建
  • 物联网中RFID标签需要人为赋予信息和手动粘贴/挂载的问题
  • Ubuntu快速安装使用gRPC C++
  • Oracle 数据库 HugePages 配置详解:提升性能的关键步骤
  • C语言学习笔记(第三部份)
  • 解决: 由于embedding 模型不可用,需要配置默认embedding 模型
  • 【Go每日一练】随机密码生成器
  • 从数据清洗到模型调优的全流程实战
  • 【AutoFormer 源码理解】
  • 阿坝州委书记徐芝文已任四川省政府党组成员
  • 国务院关税税则委员会公布公告调整对原产于美国的进口商品加征关税措施
  • 国务院关税税则委员会关于调整对原产于美国的进口商品加征关税措施的公告
  • 这个“超强致癌细菌”,宝宝感染率高达40%,预防却很简单
  • 牟海松任国家信访局副局长
  • 国家统计局今年将在全国开展两次人口固定样本跟访调查