c++找到一个二叉搜索树两个指定节点的最近公共祖先
时间: 2024-10-29 09:25:20 浏览: 8
在C++中,找到给定二叉搜索树(Binary Search Tree,BST)中两个指定节点的最近公共祖先(Lowest Common Ancestor,LCA)可以采用递归的方式来解决。首先,你需要明确的是,对于BST来说,每个节点的左子树的所有节点值都小于该节点,右子树的所有节点值大于该节点。
下面是基本的算法步骤:
1. **基本情况**:
- 如果两个节点都是空,说明它们不存在于树中,所以返回null;
- 如果其中一个节点为空,另一个非空,则直接返回非空的那个节点,因为它是另一个的祖先。
2. **递归查找**:
- 让两个指针指向当前节点,然后分别检查它们应该向左还是向右移动,以便找到各自的路径。
- 对于每个节点,如果它大于目标A且小于目标B,那么它的左孩子可能是我们要找的LCA;如果它小于目标A且大于目标B,那么它的右孩子可能是LCA;否则,这个节点就是LCA。
以下是伪代码形式的示例:
```cpp
TreeNode* findLCA(TreeNode* root, TreeNode* A, TreeNode* B) {
if (!root || root == A || root == B) return root;
// 分别沿着A和B可能的路径向下比较
if (root->val > A->val && root->val > B->val)
return findLCA(root->left, A, B);
else if (root->val < A->val && root->val < B->val)
return findLCA(root->right, A, B);
else
return root; // 找到了LCA
}
```
阅读全文