2021年9月14日21:20:25

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
//如果pq都在左子树 那么返回左子树返回的值
        if( recur(root.left,p) && recur(root.left,q))
            return lowestCommonAncestor(root.left,p,q);
        else if(recur(root.right,q) && recur(root.right,p ))
            return lowestCommonAncestor(root.right,p,q);
//pq不属于既不都在左子树 也不都在右子树 即 该点是最近的公共祖先
        else return root;


    }
    public boolean recur(TreeNode root, TreeNode p){
        if(root == null && p!=null ) return false;

        if(root == p) return true;
        else return recur(root.left,p) || recur(root.right,p);
    }
}