对二叉链表表示的二叉树,求两个节点最近的公共祖先
时间: 2024-01-23 07:07:01 浏览: 27
对于二叉链表表示的二叉树,可以通过递归的方式来求两个节点的最近公共祖先。
假设要求节点 p 和节点 q 的最近公共祖先,可以分为以下情况:
1. 如果当前节点为空,直接返回空。
2. 如果当前节点为 p 或 q 中的任意一个,直接返回当前节点。
3. 分别在左子树和右子树中递归查找节点 p 和节点 q。
4. 如果节点 p 和节点 q 分别在当前节点的左子树和右子树中,当前节点即为最近公共祖先。
5. 如果节点 p 和节点 q 都在当前节点的左子树中,递归查找左子树。
6. 如果节点 p 和节点 q 都在当前节点的右子树中,递归查找右子树。
具体实现可以参考以下代码:
```
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
if (root == NULL || root == p || root == q) {
return root;
}
TreeNode* left = lowestCommonAncestor(root->left, p, q);
TreeNode* right = lowestCommonAncestor(root->right, p, q);
if (left != NULL && right != NULL) {
return root;
} else if (left != NULL) {
return left;
} else {
return right;
}
}
```