题目分析:[[EVD]] - 剑指 Offer 68 - I. 二叉搜索树的最近公共祖先
https://leetcode-cn.com/problems/er-cha-sou-suo-shu-de-zui-jin-gong-gong-zu-xian-lcof/
简单描述:
- 最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)
限制🚫
- 所有节点的值都是唯一的。
- p、q 为不同节点且均存在于给定的二叉搜索树中。
示例:
6
/ \
2 8
/ \ / \
0 4 7 9
/ \
3 5
输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8
输出: 6
解释: 节点 2 和节点 8 的最近公共祖先是 6。
解题思路:
思路:
- #递归 二叉搜索树中,节点p、q的值和父节点进行比较
效率:
- 时间复杂度
- 空间复杂度
代码:
class Solution
{
public:
TreeNode *lowestCommonAncestor(TreeNode *root, TreeNode *p, TreeNode *q)
{
if (root->val < p->val && root->val < q->val)
return lowestCommonAncestor(root->right, p, q);
if (root->val > p->val && root->val > q->val)
return lowestCommonAncestor(root->left, p, q);
return root; // 当节点在root左右时返回root
}
};