c语言从树上找任意两个结点最近的公共祖先完整代码
时间: 2024-05-04 14:17:37 浏览: 81
以下是使用指针和递归实现的C语言代码,可以找到树中任意两个结点的最近公共祖先:
```c
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
};
struct TreeNode* lowestCommonAncestor(struct TreeNode* root, struct TreeNode* p, struct TreeNode* q) {
if (root == NULL || root == p || root == q) {
// 如果当前节点为空或者是p或者是q,则返回当前节点
return root;
}
struct TreeNode *left = lowestCommonAncestor(root->left, p, q);
struct TreeNode *right = lowestCommonAncestor(root->right, p, q);
if (left == NULL) {
// 如果左子树为空,则返回右子树
return right;
} else if (right == NULL) {
// 如果右子树为空,则返回左子树
return left;
} else {
// 如果左右子树都不为空,则返回当前节点
return root;
}
}
```
在此代码中,我们首先判断当前节点是否为空或者是p或者是q,如果是,则返回当前节点。否则,我们递归地在左子树和右子树中搜索p和q,如果左子树为空,则返回右子树,反之亦然。如果左右子树都不为空,则返回当前节点,因为当前节点就是p和q的最近公共祖先。
阅读全文