思路

递归的来解决,调用自己获得左子树的最近公共祖先,右子树的最近公共祖先
分情况返回最终结果。

代码

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 NULL;
        else if(left != NULL && right != NULL)return root;
        else return left != NULL ? left : right;
    }
};