1
我的二進制搜索樹不能管理多於3個節點或能夠顯示它們。我需要迭代地添加它們,並在作業中使用堆棧顯示它們,但如果它具有多於3個元素,則無法顯示BST。爲什麼我的二進制搜索樹顯示多於3個節點?
public boolean add(E b) {
//if tree is empty
if (root == null) {
root = new Node();
root.setValue(b);
count++;
return true;
} //if val is already in tree
else if (b.compareTo(root.getValue()) == 0) {
return false;
//if left or right spot is free
} else {
while (root != null) {
compareResult = root.value.compareTo(b);
spot = root;
if (compareResult < 0) {
if (root.left != null) {
spot = spot.left;
count++;
return true;
} else {
Node n = new Node<>();
n.setValue(b);
spot.left = n;
count++;
return true;
}
} else if (compareResult > 0) {
if (root.right != null) {
spot = spot.right;
count++;
return true;
} else {
Node n = new Node<>();
n.setValue(b);
spot.right = n;
count++;
return true;
}
} else {
return false;
}
}
}
return false;
}
public void display() {
//needs to use an iterator
if (root == null) {
System.out.println("Error");
} else {
Node CurrentNode;
CurrentNode = root;
while (!stack.isEmpty() || CurrentNode != null) {
if (CurrentNode != null) {
stack.push(CurrentNode);
CurrentNode = CurrentNode.right;
}
else {
Node m= stack.pop();
System.out.println(m.value);
CurrentNode = m.left;
}
}
}
}
public int size() {
return count;
}
@Override
public int compareTo(E t) {
return ordering.compare(root,t);
}
@Override
public int compare(E t, E t1) {
return t.compareTo(t1);
}
Node類看起來像這樣
public class Node<E extends Comparable> {
E value;
Node<E> left;
Node<E> right;
//constructor
public Node() {
value = null;
left = null;
right = null;
}
public void setValue(E t) {
value = t;
}
public void setLeft(Node<E> t) {
left = t;
}
public void setRight(Node<E> t) {
right = t;
}
public Node<E> getLeft() {
return left;
}
public Node<E> getRight() {
return right;
}
public E getValue() {
return value;
}
這不是一個完整的答案,因爲我不會爲你做你的功課。但基本上,你的'add'方法需要遞歸。事實上,它只會在節點的根節點,左側子節點或右側子節點添加事物。你的大部分邏輯都可以被刪除,因爲如果你插入的值不是__根值,你可以再次調用'add'來通過左邊的節點。如果它的_greater大於_根值,那麼可以再次調用'add'來通過右邊的節點。您錯過了這個遞歸步驟。 –
我將如何遞歸調用它? BST中的大多數對象都是Node對象,因此我無法再次調用add。我只能在E上調用Add,然後我不知道如何結束程序。 – HollyNeedsHelp
你有幾個選項。你可以把'add'方法放在'Node'類中。然後,'Tree'類中的'add'方法將檢查是否存在'Node',如果存在,則調用'Node'上的'add'。或者,你可以這樣做,使得'Node'類內的'left'和'right'實際上是樹,而不僅僅是節點。 –