235.二叉搜索树的最近公共祖先 (Easy)*
题目描述*
给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。
示例*
输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8
输出: 6
输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 4
输出: 2
代码*
是二叉搜索树,所以只要比较大小关系就行。一共也就几种情况,结点都小于根结点,则在左子树,大于在右子树,一个大一个小就是当前根结点。
class Solution {
public:
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
if(p->val > q->val) {
return lowestCommonAncestor(root, q, p);
}
if(p->val == root->val || q->val == root->val) {
return root;
}
if(q->val < root->val) {
return lowestCommonAncestor(root->left, p, q);
}else if(p->val > root->val) {
return lowestCommonAncestor(root->right, p, q);
}else {
return root;
}
}
};
class Solution {
public:
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
if(root == nullptr || p == nullptr || q == nullptr) {
return nullptr;
}
int qv = q->val, pv = p->val;
if(pv == root->val && qv == root->val) {
return root;
}
if(pv > qv) {
int tmp = pv;
pv = qv;
qv = tmp;
}
while(root != nullptr) {
if(qv < root->val) {
root = root->left;
}else if(pv > root->val) {
root = root->right;
} else {
return root;
}
}
return nullptr;
}
};
最后更新: July 23, 2022