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;
}
}