思路分析:
- 函数的目标是找到两个给定节点
p
和q
在二叉树中的最低公共祖先。 - 如果当前节点为空,或者是
p
或q
中的一个,直接返回当前节点。 - 递归在左子树中查找
p
和q
的最低公共祖先,并在右子树中查找。 - 如果左右子树都找到了最低公共祖先,说明当前节点就是最低公共祖先。
- 如果只有左子树找到了最低公共祖先,则返回左子树的结果;如果只有右子树找到了最低公共祖先,则返回右子树的结果。
class Solution {
public:
// 函数用于找到两个节点 p 和 q 的最低公共祖先
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
// 如果当前节点为NULL,或者是 p 或 q 中的一个,直接返回当前节点
if(root == p || root == q || root == NULL)
return root;
// 在左子树中递归查找 p 和 q 的最低公共祖先
TreeNode *l = lowestCommonAncestor(root->left, p, q);
// 在右子树中递归查找 p 和 q 的最低公共祖先
TreeNode *r = lowestCommonAncestor(root->right, p, q);
// 如果左右子树都找到了最低公共祖先,说明当前节点就是最低公共祖先
if (l && r)
return root;
// 如果只有左子树找到了最低公共祖先,返回左子树的结果
else
return l ? l : r;
}
};