求BST两个结点的LCA
因为是BST:所以可以使用BST的性质去找LCA。
①左儿子的值小于父亲的值
②右儿子的值大于父亲的值。
所以对于结点1 Node1,结点2 Node2 的LCA:其LCA结点的值一定大于于Node1的值,小于Node2的值。
所以寻找LCA就变得很容易。从root根结点开始遍历:遍历过程中:第一个结点的值大于Node1的值,小于Node2的值:就是Node1,Node2的LCA.
Code:
struct Node{
int data;
Node *lchild,*rchild;
};
Node* LCA(Node* root,int value1,int value2){
if(root == nullptr)
return nullptr;
if(root->data > value1 && root->data > value2)
return LCA(root->lchild,value1,value2);
else if(root->data < value1 && root->data < value2)
return LCA(root->rchild,value1,value2);
else
return root;
}