LeetCode 235. 二叉搜索树的最近公共祖先(LCA)

LeetCode 235. 二叉搜索树的最近公共祖先(LCA)

📌 题目链接


💡 解题思路

一、BST 的核心性质

二叉搜索树满足:

复制代码
左子树所有节点 < root.val < 右子树所有节点

因此:

  • pq 都小于当前节点 → LCA 在左子树
  • pq 都大于当前节点 → LCA 在右子树
  • 否则,当前节点就是 最近公共祖先

二、解法一:迭代(推荐)

思路
  • 从根节点开始向下移动
  • 每次只走一条路径
  • 不需要回溯,效率高
代码
java 复制代码
class Solution {
    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
        while (root != null) {
            if (root.val > p.val && root.val > q.val) {
                root = root.left;
            } else if (root.val < p.val && root.val < q.val) {
                root = root.right;
            } else {
                return root;
            }
        }
        return null;
    }
}
复杂度分析
指标 复杂度
时间复杂度 O(h)
空间复杂度 O(1)
  • 平衡 BST:O(log n)
  • 链状 BST:O(n)

三、解法二:递归(后序思想)

思路
  • 利用 BST 性质递归搜索
  • 若当前节点值大于 pq,向左递归
  • 若小于 pq,向右递归
  • 否则返回当前节点
代码
java 复制代码
class Solution {
    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
        if (root == null) return null;

        if (root.val > p.val && root.val > q.val) {
            TreeNode left = lowestCommonAncestor(root.left, p, q);
            if (left != null) return left;
        }

        if (root.val < p.val && root.val < q.val) {
            TreeNode right = lowestCommonAncestor(root.right, p, q);
            if (right != null) return right;
        }

        return root;
    }
}
复杂度分析
指标 复杂度
时间复杂度 O(h)
空间复杂度 O(h)(递归栈)

🔍 两种解法对比

维度 迭代解法 递归解法
思路 向下搜索 自顶向下
是否回溯 ❌ 否 ✅ 是
空间复杂度 O(1) O(h)
面试推荐 ✅✅✅ ✅✅
易错点 循环条件 递归终止

✅ 总结

  • BST 的最大优势:剪枝
  • 迭代写法是最优解,空间复杂度 O(1)
  • 递归写法更符合"分治 / DFS 思维"
  • 本题是 236 普通二叉树 LCA 的简化版

一句话总结:

BST 中,LCA 是第一个值介于 p 和 q 之间的节点。

相关推荐
bIo7lyA8v2 小时前
算法稳定性分析中的随机扰动建模的技术8
算法
科研online2 小时前
基于多源数据和XGBoost-SHAP分析中国大陆绿地碳汇空间变异影响因素的非线性相关性与尺度差异
算法·学习方法
Cthy_hy2 小时前
拓扑排序超详解:原理 + Kahn 贪心算法
python·算法·贪心算法
三品吉他手会点灯3 小时前
C语言学习笔记 - 43.运算符与表达式 - 运算符1 - 运算符的分类和简单介绍
c语言·笔记·学习·算法
VkN2X2X4b3 小时前
算法复杂度的实验验证与误差分析的技术8
算法
其利天下技术3 小时前
风扇灯无刷电机自适应算法实战指南
算法·cocos2d·无刷电机自适应算法·bldc驱动自适应算法·其利无刷电机驱动算法
8Qi83 小时前
LeetCode 494:目标和(Target Sum)—— 题解 ✅
算法·leetcode·职场和发展·动态规划·01背包
hujinyuan201604 小时前
2026年3月 中国电子学会青少年软件编程(Python)三级考试试卷 真题及答案
java·python·算法
froyoisle4 小时前
CSP-J 历年复赛 T1 及解析(2019~2025)
数据结构·c++·算法·csp-j·csp·算法竞赛·信息学