首先,我要说这是一个家庭作业项目,我是一名学生。 既然这已经不合我的意向了,我被告知要创建自己的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

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