0
我創建了一個二進制搜索樹類,我跟蹤了一些youtube視頻。問題是,從我所知道的情況來看,我的代碼和我遵循的指南完全一樣。問題是,當我運行我的main()
方法時,沒有任何反應。沒有編譯或運行時錯誤,程序根本就什麼都不做。應該發生的是,如果我使用遍歷方法,它應該使用toString()
方法來打印出這些鍵的一些鍵和值,或者如果我使用findNode()
方法,它應該提供一個節點的值。我希望有人可以檢查我的代碼,看看他們是否可以發現任何邏輯錯誤,因爲我花了很長時間檢查和重新檢查我的代碼,我似乎無法發現它。Java二進制搜索樹在運行時不打印
這裏是我的主要方法的代碼:
public class BinarySearchTreeAss2 {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
BinarySearchTree myTree = new BinarySearchTree();
myTree.addNode(50, 1);
myTree.addNode(25, 2);
myTree.addNode(15, 3);
myTree.addNode(30, 4);
myTree.addNode(75, 5);
myTree.addNode(80, 6);
myTree.inOrderTraversal(myTree.root);
System.out.println("\n\n");
myTree.preOrderTraversal(myTree.root);
System.out.println("\n\n");
myTree.postOrderTraversal(myTree.root);
System.out.println(myTree.findNode(30));
}
}
而對於二叉搜索樹類的代碼:
public class BinarySearchTree {
Node root;
public void addNode(int key, int value) {
Node newNode = new Node(key, value);
if(root == null) {
root = newNode;
} else {
Node focusNode = root;
Node parent;
while(true) {
parent = focusNode;
if(key < focusNode.key) {
focusNode = focusNode.leftChild;
if(focusNode == null) {
parent.leftChild = newNode;
return;
} else {
focusNode = focusNode.rightChild;
if(focusNode == null) {
parent.rightChild = newNode;
return;
}
}
}
}
}
}
public void inOrderTraversal(Node focusNode) {
if(focusNode != null) {
inOrderTraversal(focusNode.leftChild);
System.out.println(focusNode);
inOrderTraversal(focusNode.rightChild);
}
}
public void preOrderTraversal(Node focusNode) {
if(focusNode != null) {
System.out.println(focusNode);
preOrderTraversal(focusNode.leftChild);
preOrderTraversal(focusNode.rightChild);
}
}
public void postOrderTraversal(Node focusNode) {
if(focusNode != null) {
postOrderTraversal(focusNode.leftChild);
postOrderTraversal(focusNode.rightChild);
System.out.println(focusNode);
}
}
public Node findNode(int key) {
Node focusNode = root;
while(focusNode.key != key) {
if(key < focusNode.key) {
focusNode = focusNode.leftChild;
} else {
focusNode = focusNode.rightChild;
}
if(focusNode == null) {
return null;
}
}
return focusNode;
}
}
class Node {
int key;
int value;
Node leftChild;
Node rightChild;
Node(int key, int value) {
this.key = key;
this.value = value;
}
@Override
public String toString() {
return value + " has the key " + key;
}
}