您的位置:首页 > 其它

LeetCode 235. Lowest Common Ancestor of a Binary Search Tree

2016-03-07 16:57 447 查看
题意:求一颗二叉搜索树的上两个节点的最小公共子序列

思路:我们根据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;
}
}
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: