【问题标题】:Java BST recursion variable settingJava BST递归变量设置
【发布时间】:2017-10-22 18:17:12
【问题描述】:

我有一个普通的二叉搜索树,它使用数据的字符串值以及左右节点来实现。树工作正常,但我的 rankOf 函数有问题。我使用递归来查找节点,并且当元素存在时该方法成功,但是当不存在的值不起作用时,我无法弄清楚如何在其中设置布尔值来帮助解决这个问题。代码如下:

private int rankOf(String s, Node n){
    if (n != null){

        //check root
        if (s.compareTo(n.value) == 0){
            if (n.left != null){
                return size(n.left);
            }
            return 0;
        }
        // only worry about left tree, easy
        if (s.compareTo(n.value) < 0){
            return rankOf(s, n.left);
        } else {
            // must count entire left tree plus root node
            return rankOf(s, n.right) + size(n.left) + 1;
        }

    }
    //null or not found
    return 0;
}

当 root 等于该值时,我知道元素在树中,所以应该有一些东西进去,但不确定如何处理。

【问题讨论】:

  • “但是当不存在的值不起作用时”它会引发异常?请张贴你的树
  • 您的size 方法返回什么?另外,如果成功/失败,您的方法应该返回什么?
  • @SchiduLuca Size 返回传递的节点的子树上的节点数量。如果失败,它可以返回 -1。
  • @CodeIsLife 它不会抛出异常,它只会返回排名,就好像值存在一样。例如,如果树包含 A、B 和 C,并且您尝试查找 D 的等级,即使 D 不在树中,它也会返回 3(比 D 小 3 个节点)。

标签: java recursion binary-search-tree


【解决方案1】:

这个检查没用:

if (n.left != null){
     return size(n.left);
}

无论如何,你可以这样做:

static int rankOf(String s, Node root) {
    if(root == null) {
        return -1;
    }

    if(root.value.equals(s)) {
        return size(root);
    }

    int result;
    if(s.compareTo(root.value) > 0) {
        result = rankOf(s, root.right);
    } else {
        result = rankOf(s, root.left);
    }
    return result;
}

还有你的size() 方法:

static int size(Node root) {
    if(root == null) return 0;
    return size(root.left) + size(root.right) + 1;
}

如果找不到String,将返回-1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-18
    • 2014-06-30
    • 2016-02-23
    • 2021-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多