编写算法,在二叉排序树上找出任意两个不同结点的最近公共祖先。C++代码完整实现
时间: 2024-12-20 21:28:03 浏览: 4
在二叉排序树上找到任意两个不同节点的最近公共祖先,可以使用递归的方法。这里给出一个简单的C++实现思路:
首先,我们需要一个Node结构体表示二叉树的节点:
```cpp
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
```
然后,我们可以定义一个函数`findLCA`,它接收三个参数:根节点、第一个节点指针和第二个节点指针。如果两个节点都位于左子树或者右子树,那么它们的最近公共祖先也在相应的子树里,所以我们递归地分别在左右子树寻找。
```cpp
TreeNode* findLCA(TreeNode* root, TreeNode* p, TreeNode* q) {
if (!root) return nullptr;
// 如果p和q都在左子树或右子树
if (root->val > p->val && root->val > q->val)
return findLCA(root->left, p, q);
else if (root->val < p->val && root->val < q->val)
return findLCA(root->right, p, q);
// 找到了最近的公共祖先,因为它大于两者并且在这两个节点之间
return root;
}
```
最后,如果你有一个二叉搜索树的头节点`root`,你可以这样查找两个给定节点的最近公共祖先:
```cpp
int main() {
// 假设你已经有了二叉搜索树的根节点root和两个节点指针p和q
TreeNode* lca = findLCA(root, p, q);
// ... 进行其他操作
return 0;
}
```
阅读全文