判定二分查找树

BST判定

http://www.nowcoder.com/questionTerminal/d7a2a2bc00544dbfa71cdef591354c9a

有一半的代码都在处理输入格式:

import java.util.*;
class TreeNode{    //定义树节点
    int val;
    TreeNode left, right;
    TreeNode(int n){val = n;}
}
public class Main {
    public static void main(String[] args) throws Exception{
        Scanner sc = new Scanner(System.in);
        Map<Integer, TreeNode> m = new HashMap<>();    //用节点值映射树节点
        m.put(-1, null);
        int r = Integer.parseInt(sc.nextLine());    //根节点
        m.put(r, new TreeNode(r));
        while(sc.hasNextLine()){
            String[] v1 = sc.nextLine().split(":");    //处理这奇葩的输入
            String[] v2 = v1[1].split("[|]");
            int lf = Integer.parseInt(v2[0]), rt = Integer.parseInt(v2[1]);
            if(lf != -1) m.put(lf, new TreeNode(lf));
            if(rt != -1) m.put(rt, new TreeNode(rt));
            m.get(Integer.parseInt(v1[0])).left = m.get(lf);
            m.get(Integer.parseInt(v1[0])).right = m.get(rt);
        }
        if(h(m.get(r))) System.out.println(1);
        else System.out.println(0);
    }
    static int f(TreeNode r){    //求一棵树的最大节点值
        if(r == null) return Integer.MIN_VALUE;
        return Math.max(Math.max(f(r.left), f(r.right)), r.val);
    }
    static int g(TreeNode r){    //求一棵树的最小节点值
        if(r == null) return Integer.MAX_VALUE;
        return Math.min(Math.min(g(r.left), g(r.right)), r.val);
    }
    static boolean h(TreeNode r){    //判断BST
        if(r == null) return true;
        return r.val > f(r.left) && r.val < g(r.right) && h(r.left) && h(r.right);
    }
}
全部评论

相关推荐

06-26 10:08
门头沟学院 C++
北京Golang实习,一个月4700,吃住都不报,公司位置在海淀。请问友友怎么看呢?如果要租房的话有什么建议吗
码农索隆:租房肯定是合租了,剩下的钱,差不多够正常吃饭了,看看能不能学到东西吧
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-01 11:47
点赞 评论 收藏
分享
king122:专业技能不要写这么多,熟悉和熟练你经不住问,排版有些难看,中间的空隙搞小一点,项目描述的话感觉是从课程中抄下来的,改一改吧,不然烂大街了,每个项目都写一两点,用什么技术实现了什么难点,然后再写一些数字上去像时间又花了90%这样,这样面试会多一些,如果觉得自己的项目还是不够用的话,我有几个大厂最近做过的实习项目,感兴趣的话可以看我简介中的项目地址
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

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