简单算法 在二叉树中找到两个节点的最近公共祖先(java)
描述
给定一棵二叉树(保证非空)以及这棵树上的两个节点对应的val值 o1 和 o2,请找到 o1 和 o2 的最近公共祖先节点。
注:本题保证二叉树中每个节点的val值均不相同。
想法:利用递归查找o1,和o2位置,再通过判断来选择其公共祖先结点
public int lowestCommonAncestor (TreeNode root, int o1, int o2) {
// write code here
return findfather(root, o1, o2).val;
}
public TreeNode findfather(TreeNode root, int o1, int o2){
if(root == null || root.val == o1 || root.val == o2)
return root;
TreeNode left = findfather( root.left,o1, o2);
TreeNode right = findfather( root.right,o1, o2);
if(left == null) return right;
if(right == null) return left;
return root;
}