LeetCode 剑指 Offer 68 - I. 二叉搜索树的最近公共祖先
题目描述
思路分析
解法一:利用 BST 性质(推荐)
核心思路:
- 若 p、q 均小于当前节点,则 LCA 在左子树。
- 若 p、q 均大于当前节点,则 LCA 在右子树。
- 否则当前节点就是最近公共祖先。
复杂度分析:
- 时间复杂度:O(h),其中 h 表示树高。
- 空间复杂度:O(1) 额外空间。
class Solution {
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
TreeNode cur = root;
while (cur != null) {
if (p.val < cur.val && q.val < cur.val) {
cur = cur.left;
} else if (p.val > cur.val && q.val > cur.val) {
cur = cur.right;
} else {
return cur;
}
}
return null;
}
}
func lowestCommonAncestor(root *TreeNode, p *TreeNode, q *TreeNode) *TreeNode {
cur := root
for cur != nil {
if p.Val < cur.Val && q.Val < cur.Val {
cur = cur.Left
} else if p.Val > cur.Val && q.Val > cur.Val {
cur = cur.Right
} else {
return cur
}
}
return nil
}
相似题目
| 题目 | 难度 | 考察点 |
|---|---|---|
| 235. 二叉搜索树的最近公共祖先 | 简单 | BST |
| 236. 二叉树的最近公共祖先 | 中等 | 树递归 |
| 98. 验证二叉搜索树 | 中等 | BST |
| 701. 二叉搜索树中的插入操作 | 中等 | BST |
| 530. 二叉搜索树的最小绝对差 | 简单 | BST |
本博客所有文章除特别声明外,均采用
CC BY-NC-SA 4.0
许可协议,转载请注明出处!