在root为根的二叉树中找A,B的LCA:
若是找到了就返回这个LCA
若是只碰到A,就返回A
若是只碰到B,就返回B
若是都没有,就返回nullnode
/** * Definition of TreeNode: * public class TreeNode { * public int val; * public TreeNode left, right; * public TreeNode(int val) { * this.val = val; * this.left = this.right = null; * } * } */ public class Solution { /** * @param root: The root of the binary search tree. * @param A and B: two nodes in a Binary. * @return: Return the least common ancestor(LCA) of the two nodes. */ public TreeNode lowestCommonAncestor(TreeNode root, TreeNode node1, TreeNode node2) { //三种状况: 都在左子树中, 都在右子树中, 左右分别 //在二叉树的左右子树找node1和node2, 找到及返回, 根据left和right是否存在内容决定最低公共祖先 if (root == null || root == node1 || root == node2){ return root; } TreeNode left = lowestCommonAncestor(root.left, node1, node2); TreeNode right = lowestCommonAncestor(root.right, node1, node2); if (left != null && right != null){ return root; } if (left != null){ return left; } if (right != null){ return right; } else{ return null; } //终止条件, 找到node1或者node2,或者到null node, 就return // if (root == null || root == node1 || root == node2) { // return root; // } // Divide (在left child和right child里面找node1和2) // TreeNode left = lowestCommonAncestor(root.left, node1, node2); // TreeNode right = lowestCommonAncestor(root.right, node1, node2); // Conquer // if (left != null && right != null) { // return root; // } // if (left != null) { // return left; // } // if (right != null) { // return right; // } // return null; //当left sub和right sub都没有n1或n2 } }