首先我要说这是一个家庭作业项目,我是一名学生。既然我想要对我的任务提出一些意见,我们被告知要创建我们自己的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之后。出于某种原因,它并未向我提供我传递给它的所有数字。谢谢你的帮助。
答案 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;
}