题目描述
给定一棵二叉树以及这棵树上的两个节点 o1 和 o2,请找到 o1 和 o2 的最近公共祖先节点。 假设节点的值都大于0.
比如9,10的最近公共祖先节点是2.
思路:
从根节点开始遍历,如果o1和o2中的任一个和root匹配,那么root就是最低公共祖先。 如果都不匹配,则分别递归左、右子树,如果有一个 节点出现在左子树,并且另一个节点出现在右子树,则root就是最低公共祖先. 如果两个节点都出现在左子树,则说明最低公共祖先在左子树中,否则在右子树。
public class LowestCommonAncestor {
public static void main(String[] args) {
}
/**
*
* @param root TreeNode类
* @param o1 int整型
* @param o2 int整型
* @return int整型
*/
public int lowestCommonAncestor (TreeNode root, int o1, int o2) {
//递归的出口
if(root==null){
return 0;
}
if(o1==root.val||o2==root.val)
{
return root.val;
}
//递归调用
int left=lowestCommonAncestor(root.left,o1,o2); //左子树
int right=lowestCommonAncestor(root.right,o1,o2); //右子树
if(left > 0 && right > 0){
return root.val;
}
if (left > 0 )
return left;
else
return right;
}
}