Input: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1
Output: 3
Explanation: The LCA of nodes 5 and 1 is 3.
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
* 分治法
如果两边返回的都不是null
如果相等,那么就是LCA,返回其中任意一个即可
如果不相等,那么root为LCA
如果left != null && right == null,返回left
如果right != null && left == null,返回right
最后两边都是null,则返回null
*/
class Solution {
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
if(root==null){
return null;
}
if(root==p||root==q||p==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 (right!=null){
return right;//不是root.right
}
else if(left!=null){
return left;
}
return null;
}
}