1.题目链接:236. 二叉树的最近公共祖先 - 力扣(LeetCode)
2.采用背景:后序遍历,因为待定的公共祖先节点需要综合左右子树的搜索结果
3.递归结束:当搜索完叶子节点或者找到相应目标节点时,返回该节点
4.递归处理:如果在左右子树都找到了节点,则必为一棵一个,返回根节点,如果左子树为空,则全在右子树,返回右子树的第一个节点,反之亦然,如果没找到,则返回NULL
class Solution {
public:
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 right;
}
else if(right==NULL)
{
return left;
}
return NULL;
}
};