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

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

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

import java.util.*;
import java.io.*;
class TreeNode {
    public int value;
    public TreeNode left;
    public TreeNode right;
    public TreeNode(int val) {
        this.value = val;
    }
}

public class Main{
   //参考左神代码
    public static TreeNode lowestAncestor(TreeNode head, TreeNode o1, TreeNode o2) {
        if (head == null || head == o1 || head == o2) {
            return head;
        }
        TreeNode left = lowestAncestor(head.left, o1, o2);
        TreeNode right = lowestAncestor(head.right, o1, o2);
        if (left != null && right != null) {
            return head;
        }
        return left != null ? left : right;
    }
    
    public static void main(String[] args)throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] params = br.readLine().split(" ");
        int n = Integer.parseInt(params[0]);
        TreeNode root = new TreeNode(Integer.parseInt(params[1]));
        HashMap<Integer ,TreeNode > map = new HashMap<>();
        map.put(root.value , root);
        for(int i = 0 ; i < n ;i++){
            params = br.readLine().split(" ");
            int val = Integer.parseInt(params[0]);
            TreeNode node = map.get(val);
            int leftval = Integer.parseInt(params[1]);
            int rightval = Integer.parseInt(params[2]);
            if(leftval != 0){
                node.left = new TreeNode(leftval);
                map.put(leftval,node.left);
            }
            if(rightval != 0){
                node.right = new TreeNode(rightval);
                map.put(rightval,node.right);
            }
        }
        params = br.readLine().split(" ");
        TreeNode o1 = map.get(Integer.parseInt(params[0]));
        TreeNode o2 = map.get(Integer.parseInt(params[1]));
        TreeNode ancestor = lowestAncestor(root, o1, o2);
        System.out.println(ancestor.value);
    }
}

全部评论

相关推荐

点赞 评论 收藏
分享
点赞 评论 收藏
分享
DKS233:(1)专业技能:Java8也太旧了,最少也要了解到JDK17吧,可以参考现在SpringBoot支持的Java最低版本,熟悉mysql基本理论具体指啥,是锁这种具体原理还是分库分表这些业务场景,spring这些专业词汇,大小写要写对(全篇简历都有这个问题,显得不严谨),熟悉使用框架进行业务开发就别写了,如果要写,起码要写到框架原理部分吧,比如aop,启动原理什么的,springcloud具体指哪些模块呢,写清楚,网关还是鉴权还是什么,“改造”没必要写吧,你直接说用springcloud开发的不就行了(2)项目经历:首先格式就有大问题,时间怎么能换行呢,调整一下,响应速度那个,如果指的是将部分数据从其他数据库转到redis的提升就别写了,因为这个不算难点,redis可以写写分布式这些,比如容灾怎么实现的,数据库同步怎么做的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务