自定义二进制搜索树,inOrder不工作,需要输入,

时间:2014-04-19 23:50:56

标签: java recursion binary-search-tree

首先我要说这是一个家庭作业项目,我是一名学生。既然我想要对我的任务提出一些意见,我们被告知要创建我们自己的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 :(得分:0)

你在错误的地方得到了一个闭合的大括号。

留下作为原始海报的作业,找出它的位置。如果我只是通过观察手机上的代码就可以找到它,你肯定能够借助一步调试器来解决这个问题。

此外,如果数据应该是通用的,请不要试图将其视为可以互换为整数。使用比较器&lt; T>而不是假设&#34;小于&#34;运营商工作。

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

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

为什么不

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