/**
* 返回二叉树两个节点的最近公共祖先
*/
public class LowestCommonAncestor {
public static BinaryTree getLowestCommonAncestor(BinaryTree root, BinaryTree node1, BinaryTree node2){
if(root == null){
return root;
}
if(root == node1 || root == node2){
return root;
}
BinaryTree left = getLowestCommonAncestor(root.left, node1, node2);
BinaryTree right = getLowestCommonAncestor(root.right, node1, node2);
if(left != null && right != null){
return root;
}
if(left != null){
return left;
}
if(right != null){
return right;
}
return null;
}
public static void main(String[] args){
BinaryTree head = new BinaryTree(1);
BinaryTree left = new BinaryTree(2);
BinaryTree right = new BinaryTree(3);
BinaryTree left01 = new BinaryTree(4);
BinaryTree right01 = new BinaryTree(5);
head.left = left;
head.right = right;
left.left = left01;
left.right = right01;
BinaryTree lowestCommonAncestor = getLowestCommonAncestor(head, left01,right01);
System.out.println(lowestCommonAncestor.value);
}
}
//二叉树的类
class BinaryTree{
int value;
BinaryTree left;
BinaryTree right;
public BinaryTree(int value){
this.value = value;
}
}