给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。  
   例:图中给定树 {3,5,1,6,2,0,8,#,#,7,4} 中,节点6、节点4的最近公共祖先为5。  
 class Solution: def nearestCommonAncestor(self , root , p , q ): # write code here if not root&nbs***bsp;root.val == q.val&nbs***bsp;root.val == p.val: return root left = self.nearestCommonAncestor(root.left, p, q) right = self.nearestCommonAncestor(root.right, p, q) if not left: return right if not right: return left return root
简单题
import java.util.*;
/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 * }
 */
public class Solution {
  /**
   * 
   * @param root TreeNode类 
   * @param p TreeNode类 
   * @param q TreeNode类 
   * @return TreeNode类
  */
  public TreeNode nearestCommonAncestor (TreeNode root, TreeNode p, TreeNode q) {
    if (root == null) {
      return null;
    }
    if (root.val == p.val || root.val == q.val) {
      return root;
    }
    TreeNode leftAns = nearestCommonAncestor(root.left, p, q), 
    rightAns = nearestCommonAncestor(root.right, p, q);
    if (leftAns != null && rightAns != null) {
      return root;
    }
    return leftAns != null ? leftAns : rightAns;
  }
}
                                                                                    public class Solution {
    /**
     * 
     * @param root TreeNode类 
     * @param p TreeNode类 
     * @param q TreeNode类 
     * @return TreeNode类
     */
    public TreeNode nearestCommonAncestor (TreeNode root, TreeNode p, TreeNode q) {
        // write code here
        return helper(root, p, q);
    }
    
    public TreeNode helper(TreeNode root, TreeNode p, TreeNode q) {
        if (root == null)
            return null;
        if (root.val == p.val || root.val == q.val)
            return root;
        TreeNode left = helper(root.left, p, q), right = helper(root.right, p, q);
        if (left == null && right == null)
            return null;
        else if (left != null && right != null)
            return root;
        else
            return left == null ? right : left;
    }
}