首先,我要说这是一个家庭作业项目,我是一名学生。 既然这已经不合我的意向了,我被告知要创建自己的BST。 我已经编写了代码,但似乎无法找出为什么它没有给我正确的输出。 我知道这是错误的,但我不知道这是怎么回事。 这是我的代码的开始版本,因此我的方法有点怪异。 谢谢你的帮助。

private BTNode<T> root;
private int maxHeight;
private int numberOfNodes;

@Override
public int getMaxHeight() {
    return maxHeight;
}

@Override
public int getNodeCount() {

    return numberOfNodes;
}



@Override
public BTNode<T> getRoot() {

    return root;
}

//这是我认为问题开始的地方。

@Override
public BTNode<T> insert(T rec) {
    BTNode<T> node = new BTNode<T>();
    if (isEmpty()) {
        root = node;
        root.setRecord(rec);
        root.setHeight(0);
    } else
        node = insertify(rec, root);
    numberOfNodes++;

    return node;
}



private BTNode<T> insertify(T rec, BTNode<T> node) {
    int TVal = Integer.parseInt(rec.toString());
    int Nodevalue = Integer.parseInt(node.getRecord().toString());
    BTNode<T> newnode = null;

    if (TVal < Nodevalue) {
        if (node.hasLeft())
            this.insertify(rec, node.getLeft());
        else {
            newnode = new BTNode<T>();
            node.setLeft(newnode);

            newnode.setRecord(rec);
            newnode.setParent(node);
            newnode.setHeight(newnode.getParent().getHeight() + 1);


            if (newnode.getHeight() > maxHeight)
                maxHeight = newnode.getHeight();

        }


    } else if (TVal > Nodevalue) {
        if (node.hasRight())
            this.insertify(rec, node.getRight());
    } else {
        newnode = new BTNode<T>();
        node.setRight(newnode);

        newnode.setRecord(rec);
        newnode.setParent(node);
        newnode.setHeight(newnode.getParent().getHeight() + 1);


        if (newnode.getHeight() > maxHeight)
            maxHeight = newnode.getHeight();
        return newnode;
    }

    return newnode;

}


@Override
public boolean isEmpty() {

    if (root == null)
        return true;
    else
        return false;
}


ArrayList<T> inorder = new ArrayList<T>();

private void inordertra(BTNode<T> node) {
    if (node.hasLeft()) {
        inordertra(node.getLeft());
    }

    inorder.add(node.getRecord());

    if (node.hasRight()) {
        inordertra(node.getRight());
    }
}

@Override
public String toStringInorder(BTNode<T> v) {
    String s = "";
    inorder.clear();
    inordertra(root);

    for (int i = 0; i < inorder.size(); i++) {
        s =  s + inorder.get(i);
    } 
    System.out.print(s);
    return s;
}

}

当我创建一个新的BST实例并插入一堆整数值然后调用toStringinorder方法时,我只是得到1 3作为输出。 这是在我依次插入3,5,1,7,6之后。 由于某种原因,它并没有提供我传递给我的所有数字。 谢谢您的帮助。

===============>>#1 票数:0

您在错误的位置放了一个大括号。

留作原始海报的作业以弄清楚它在哪里。 如果仅通过查看手机上的代码就可以找到它,那么您肯定可以借助一步调试器来解决它。

同样,如果数据应该是通用的,则不要尝试将其视为始终可以相互转换为Integer的方式。 使用Comparator <T>代替假定“小于”运算符起作用。

最后,以下代码令人震惊:

@Override
public boolean isEmpty() {
    if (root == null)
        return true;
    else
        return false;
}

为什么不

@Override
public boolean isEmpty() {
    return root == null;
}

  ask by Justin Taylor translate from so

未解决问题?本站智能推荐:

1回复

自定义二进制搜索树中的最短路径

这是编码竞赛中的一个问题 最初的问题可以在这里找到http://www.olympiad.org.za/olympiad/wp-content/uploads/2014/03/2013-PO-Question-Paper.pdf问题5 通过霍尔的最短路径[由Hulsbos High的
2回复

如何实现在Java二进制搜索树中返回按顺序排序的数组的方法?

这是我尝试的: 但是输出不正确。 如果我用此输入创建树: 我通过sortedArray获得的输出是这样的: 我做错了什么? 我意识到它从根部跳过了右侧的所有左子树,但是我看不出为什么...
3回复

需要帮助来了解遍历二进制搜索树方法

我遇到了一个遍历的二叉搜索树函数,但无法解决这个问题。 这是代码: 假设有一个“两级”平衡二进制搜索树,这就是我对这种递归方法的理解: 从root != null开始root != null inOrderTraverseTree(root.leftChild) >运行
1回复

二进制搜索树搜索返回Null

除了一个关键功能,搜索,我在java中编写了一个功能齐全的二叉搜索树。 我正在使用逻辑,我将检查root是否为null,然后如果我要搜索的术语等于root(所以返回root)或> root(所以搜索右子树)或<root(搜索右子树) )使用递归方法。 通过调用searchBST(
4回复

递归比较两个二进制搜索树

我需要比较两个二进制搜索树,看看它们是否相等。 我开发了以下使用递归的代码。 问题是,如果两个节点不相等,则该方法将返回false,但是由于我使用了递归,因此无论如何返回值都将被覆盖为true。 我整天都被这个问题困扰着,对我没有任何帮助。 我在网上搜索,但没有找到与我的代码相关的
1回复

用Java递归创建二进制搜索树

我一直在尝试创建将创建完整的二进制搜索树的递归方法。 此方法返回对该树的根的引用。 作为参数,我传递树的深度以及存储在当前子树根目录中的数字。 当深度为0和1时,我设法解决了2种基本情况,但是当我尝试大于1的数字时,我只能正确地实例化0级和1级,而不能正确实例化下一个。 任何帮助都会很棒
1回复

删除Java二进制搜索树中的方法

所以我的界面说必须照顾以下资格: 这是我到目前为止已完成的一些额外调试: 我已经开始测试叶子节点的情况,但它们不起作用。 难道我做错了什么? BST的所有其他功能都能正常工作并经过彻底测试。 我只需要得到这个darn remove()。
1回复

检查二进制搜索树是否退化

我想检查二进制搜索树是否退化(是链表还是树?),我已经尝试了一段时间,但没有找到任何可行的方法。 我确实提出了一个非递归解决方案,我认为它很聪明,但是规范指出它必须是一个递归解决方案,并且我已经将其从非递归转换为递归。 这是我的非递归解决方案(不是真的,因为大小和高度都是递归实现的。但是
4回复

二进制搜索树toString

我在以教授想要的格式打印二进制搜索树时遇到了麻烦。 他的格式如下: 子集中的第一个数字是根节点,左边和右边的节点是左边和右边的子节点。 循环迭代后,左子节点将成为根节点。 一切正常,直到我到达子集中只有一个节点的位置。 它只是打印(1,*,*)到最后,而我不知道该怎么做。
3回复

了解二进制搜索树计数

我很难理解这种二叉搜索树方法是如何计算节点的,我在网上查看了许多示例,但是找不到一个可以确切说明正在发生什么的示例。 这是一个例子: 这就是我了解此方法过程的方式,也许有人可以帮助我了解我要去哪里。 该方法是从BTS对象自身之外调用的; “ tree.nodes()等”