二叉搜索树的最近公共祖先
给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”
例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-search-tree
思路
本来不打算利用二叉排序树的性质解这道题,想用二叉树求双亲的办法来写,找双亲函数是写出来了,但发现不管函数类型是void类还是TreeNode类都不好用,而且还加时间复杂度,就改用二叉树性质了(我糊涂了,找双亲代码忘保存了)
代码
class Solution {
public:
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
TreeNode* r=root;
while((p->val-r->val)*(q->val-r->val)>0){
if(p->val<r->val){
r=r->left;
}
else{
r=r->right;
}
}
return r;
}
};