C++求二叉树中两个结点的最低公共祖先结点
时间: 2023-06-12 10:05:11 浏览: 113
二叉树中两结点最近的共同祖先算法
5星 · 资源好评率100%
求二叉树中两个结点的最低公共祖先结点可以采用递归的方式实现,具体步骤如下:
1. 如果当前节点为空,则返回空。
2. 如果当前节点为其中一个目标节点,则返回该节点。
3. 递归查找左子树并返回结果。
4. 递归查找右子树并返回结果。
5. 如果左右子树都找到了目标节点,则当前节点为最低公共祖先结点。
下面是一个示例代码实现:
```
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
};
struct TreeNode* lowestCommonAncestor(struct TreeNode* root, struct TreeNode* p, struct TreeNode* q) {
if (!root) return NULL;
if (root == p || root == q) return root;
struct TreeNode* left = lowestCommonAncestor(root->left, p, q);
struct TreeNode* right = lowestCommonAncestor(root->right, p, q);
if (left && right) return root;
return left ? left : right;
}
```
在上面的代码中,输入参数 `root` 为二叉树的根节点,`p` 和 `q` 分别为两个目标节点,函数返回最低公共祖先结点。
阅读全文