使用bfs搜索左右子树,由于bfs特性,能优先找到深度最低的节点。 如果o1,o2在当前子树的左右子树上,那么就返回为空的那项。 如果o1,o2都在左子树或者右子树上,那么就返回不为空的节点。
import java.util.*;
public class Solution {
public int lowestCommonAncestor (TreeNode root, int o1, int o2) {
return pre(root,o1,o2).val;
}
public TreeNode pre(TreeNode root, int o1 , int o2){
if(root==null || root.val==o1 || root.val==o2)
return root;
TreeNode left = pre(root.left,o1,o2);
TreeNode right = pre(root.right,o1,o2);
if(null!=left && null!=right)
return root;
return null==left?right:left;
}
}