236 二叉树的最近公共祖先

236 二叉树的最近公共祖先_第1张图片
236 二叉树的最近公共祖先_第2张图片
递归法

class Solution {
     
public:
    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
     
        if(root == NULL)
            return NULL;
        if(root == p || root == q) 
            return root;
            
        TreeNode* left =  lowestCommonAncestor(root->left, p, q);
        TreeNode* right = lowestCommonAncestor(root->right, p, q);
       
        if(left == NULL)
            return right;
        if(right == NULL)
            return left;      
        if(left && right) 
            return root;
        
        return NULL; 
    }
};

236 二叉树的最近公共祖先_第3张图片

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     public int val;
 *     public TreeNode left;
 *     public TreeNode right;
 *     public TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
     
    public TreeNode LowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q)
    {
     
        if(root == null)
            return null;
        if(root == p || root == q)
            return root;

        TreeNode left = LowestCommonAncestor(root.left, p, q);
        TreeNode right = LowestCommonAncestor(root.right, p, q);

        if(left == null)
            return right;
        if(right == null)
            return left;
        if(left != null && right != null)
            return root;
        return null;
        
    }
}

你可能感兴趣的:(236 二叉树的最近公共祖先)