题解 | #在二叉树中找到两个节点的最近公共祖先#

在二叉树中找到两个节点的最近公共祖先

http://www.nowcoder.com/practice/e0cc33a83afe4530bcec46eba3325116

import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 * }
 */

public class Solution {
    /**
     * 
     * @param root TreeNode类 
     * @param o1 int整型 
     * @param o2 int整型 
     * @return int整型
     */
    
    public TreeNode find(TreeNode t,int o1,int o2){
        if(t==null || t.val==o1 || t.val==o2) return t;
        TreeNode left = find(t.left,o1,o2);
        TreeNode right = find(t.right,o1,o2);
        if(left==null) return right;
        if(right==null) return left;
        return t;

    }
    public int lowestCommonAncestor (TreeNode root, int o1, int o2) {
        // write code here
        return find(root,o1,o2).val;
    }
}

递归情况:

1.当到达空节点时,直接返回空

2.当root等于 o1 或 o2 时,返回root

3.若不为1, 2中情况,说明需要继续处理:

对左子树进行递归,返回值记为 t1

对右子树进行递归,返回值记位 t2

t1 ,t2 存在以下几种情况:

①. 当t1, t2都为空时,说明root的左右子树中都不存在o1, o2, 返回空

②. 当t1为空且t2不为空时,说明左子树找不到 o1, o2,所以返回在右子树查找后的结果 即t2

③. 当t2为空且t1不为空时,说明右子树找不到 o1, o2,所以返回在左子树查找后的结果 即t1

④. 当t1, t2都不为空时,说明o1, o2分别位于当前root结点的左右子树中,既root为答案,返回root

全部评论

相关推荐

不愿透露姓名的神秘牛友
11-26 15:46
已编辑
字节国际 电商后端 24k-35k
点赞 评论 收藏
分享
10-14 23:01
已编辑
中国地质大学(武汉) Java
CUG芝士圈:虽然是网上的项目,但最好还是包装一下,然后现在大部分公司都在忙校招,十月底、十一月初会好找一些。最后,boss才沟通100家,别焦虑,我去年暑假找第一段实习的时候沟通了500➕才有面试,校友加油
点赞 评论 收藏
分享
牛客279957775号:铁暗恋
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务