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

LeetCode 解题思路 20(Hot 100)

在这里插入图片描述

解题思路:

  1. 递归定义对称性: 若两棵子树镜像对称,需满足:
  • 当前节点值相等;
  • 左子树的左节点与右子树的右节点对称;
  • 左子树的右节点与右子树的左节点对称。
  1. 终止条件:
  • 两个节点均为空 → 对称;
  • 一个节点为空,另一个非空 → 不对称;
  • 节点值不等 → 不对称。

Java代码:

class Solution {
    public boolean isSymmetric(TreeNode root) {
        return check(root.left, root.right);
    }

    private boolean check(TreeNode left, TreeNode right) {
        if (left == null && right == null) return true;
        if (left == null || right == null) return false;
        if (left.val != right.val) return false; 
        return check(left.left, right.right) && check(left.right, right.left);
    }
}

复杂度分析:

  • 时间复杂度: O(n),每个节点最多被访问一次。
  • 空间复杂度: O(h),h为树的高度。最坏情况(链表状树):O(n),最优情况(平衡树):O(log n)。
    在这里插入图片描述

解题思路:

  1. 递归计算子树高度: 对于每个节点,递归计算其左子树和右子树的高度。
  2. 更新最长路径: 在计算当前节点的子树高度时,利用左子树和右子树的高度之和(left + right + 1)来更新全局变量 res。此值表示以当前节点为中间节点的最长路径的节点数。
  3. 返回子树高度: 当前节点的子树高度为左、右子树高度的较大值加1,用于上层节点的路径计算。
  4. 结果转换: 由于树的直径是边的数量,而 res 记录的是节点数,最终结果需返回 res - 1。

Java代码:

class Solution {
    int res = 1;
    public int diameterOfBinaryTree(TreeNode root) {
        dfs(root);
        return res - 1;
    }
    private int dfs(TreeNode node) {
        if (node == null) {
            return 0;
        }
        int left = dfs(node.left);
        int right = dfs(node.right);
        res = Math.max(res, left + right + 1);
        return Math.max(left, right) + 1;
    }
}

复杂度分析:

  • 时间复杂度: O(n)。每个节点仅被访问一次,递归调用的总次数为 n(n 为节点数)。
  • 空间复杂度: O(h)。h 为树的高度,由递归调用栈的深度决定。最坏情况下(树退化为链表),空间复杂度为 O(n);平均情况下为 O(log n)。

相关文章:

  • 再学:合约继承 、抽象合约 solidity接口、库、事件 合约重入攻击
  • C语言论递归函数及其本质
  • 【FAQ】HarmonyOS SDK 闭源开放能力 —Map Kit(6)
  • 中兴B860AV3.2-T/B860AV3.1-T2_S905L3-B_2+8G_安卓9.0_先线刷+后卡刷固件-完美修复反复重启瑕疵
  • Linux--内核进程O(1)调度队列
  • 20分钟上手DeepSeek开发:SpringBoot + Vue2快速构建AI对话系统
  • 画册相册图库摄影画廊H5开源版开发
  • 论文阅读:SCI 1区 RADAR: Robust AI-Text Detection via Adversarial Learning
  • TypeScript + Vue:类风格组件如何引领前端新潮流?
  • 植物知识分享论坛毕设
  • Python基础语法全解析:从入门到实践
  • Qt中打开windows的cmd窗口并显示
  • Git 使用SSH登陆
  • 工厂方法模式和抽象工厂模式详解
  • 【从零开始学习计算机科学与技术】计算机网络(六)传输层
  • 调整iptables规则,解决无法ssh连接服务器的问题
  • Linux中安装Git
  • Javascript 日期相关计算
  • halcon几何测量(二)计算距离和角度的函数
  • Linux主机持久化技术
  • 官方通报汕头违建豪宅“英之园”将强拆:对有关人员严肃追责问责
  • 混乱的5天:俄乌和谈如何从充满希望走向“卡壳”
  • 一图读懂丨创新创业人才最高补贴500万元!临港新片区发布创客新政“十二条”
  • 张广智︱“编年事辑”:打开学人心路历程的窗户
  • 佩斯科夫:若普京认为必要,将公布土耳其谈判俄方代表人选
  • 摩根士丹利:对冲基金已加码,八成投资者有意近期增配中国