//如果是二叉搜索树的话,
//若当前节点t大于节点u,v,说明u,v的LCA在t的左节点中,故从t的左节点中继续查找
//若当前节点t小于节点u,v,说明u,v的LCA在t的右节点中,从t的右节点继续查找
//当找到一个节点满足u<t<v时,该节点就是u,v的LCA
//当t的一个节点的值等于u或v时,说明其中一个节点是另一个节点的父节点,返回t的父节点
struct TreeNode
{
int value;
TreeNode* left;
TreeNode* right;
};
TreeNode* FindLCA(TreeNode u, TreeNode v, TreeNode* root)
{
int left = u.value;
int right = v.value;
if (u.value > v.value)
{
left = v.value;
right = u.value;
}
TreeNode* t = root;
TreeNode* p = t;//保存当前节点的父节点
while (true)
{
if (t->value < left)
{
p = t;
t = t->right;
}
else if (t->value > right)
{
p = t;
t = t->left;
}
else if (t->value == left || t->value == right)//一个节点为另一个节点的祖先,返回父节点的父节点
return p;
else
return t;//left < t < right
}
}
树的最近公共祖先
最新推荐文章于 2023-08-16 15:52:41 发布