题意:求一颗二叉搜索树的上两个节点的最小公共子序列
思路:我们根据BST的性质可知,对于一个节点p,如果存在左子树,那么它左子树上的点全都小于p,如果存在右子树,那么它右子树上的点都大于p。
因此根据这个性质,我们可以知道如果这两个节点的值都小于p,则他两个一定在p的左子树上,如果都大于p,则一定在其右子树上。
递归:
class Solution{
public:
TreeNode* lowestCommonAncestor(TreeNode *root, TreeNode *p, TreeNode *q){
if(max(p->val, q->val) < root->val){
return lowestCommonAncestor(root->left, p, q);
}
else if(min(p->val, q->val) > root->val){
return lowestCommonAncestor(root->right, p, q);
}
else{
return root;
}
}
};
非递归:
class Solution{
public:
TreeNode *lowestCommonAncestor(TreeNode *root, TreeNode *p, TreeNode *q){
while(1){
if(max(p->val, q->val) < root->val){
root = root->left;
}
else if(min(p->val, q->val) > root->val){
root = root->right;
}
else{
return root;
}
}
}
};