首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于检查一棵树是否是Java中的二进制搜索树的代码正在失败测试用例。不知道为什么

用于检查一棵树是否是Java中的二进制搜索树的代码正在失败测试用例。不知道为什么
EN

Stack Overflow用户
提问于 2017-07-28 14:47:27
回答 1查看 222关注 0票数 0

我开始在Hackerrank上做一个BST问题,如果树是BST,我应该返回true,否则返回false。在这20宗个案中,我有4宗不及格,我不知道原因何在。造成这个问题的人没有提供关于他/她如何处理输入和如何制作树的详细信息。

这是我的代码:

代码语言:javascript
复制
Map<Integer, Integer> numMap = new HashMap<Integer, Integer>();


    boolean checkDuplicates(int val){
        if(numMap.containsKey(val)){
            return false;
        }
        else{
            numMap.put(val, 1);
            return true;
        }
    }


    boolean checkBST(Node root) {
        if(root.left == null && root.right == null){
            return (true && checkDuplicates(root.data));
        }
        else if(root.left.data > root.data || root.right.data < root.data){
            return false;
        }
        else{
            if(root.left == null){
                return (checkBST(root.right) && checkDuplicates(root.data));
            }
            else if(root.right == null){
                return (checkBST(root.left) && checkDuplicates(root.data));
            }
            else{
                return (checkBST(root.left) && checkBST(root.right) && checkDuplicates(root.data));
            }
        }
     }

下面是指向hackerrank问题的链接:https://www.hackerrank.com/challenges/ctci-is-binary-search-tree

我在这里做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-28 14:53:20

子树中的每个节点必须比根小/大。你只要检查子树的根。

例如,这不是BST:

代码语言:javascript
复制
       5
  3       7
1   6

此条件还意味着不存在重复项,您不必单独检查。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45376422

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档