使用 Java 中的可比较递归地向 BST 添加节点
Adding a Node to a BST recursively using comparable in Java
所以我一直在尝试以递归方式向 BST 插入或添加节点,但我被难住了。我不断得到
线程异常 "main" java.lang.WhosebugError
我假设这是由递归引起的,但我不知道从这里去哪里,如果有人能提供帮助,我会喜欢一些方向。 :)
public void add(Type obj) {
TreeNode<Type> newNode = new TreeNode<Type>(obj);
if (root == null) {
root = newNode;
} else {
addNode(root, newNode);
}
}
private void addNode(TreeNode<Type> current, TreeNode<Type> newNode) {
current = root;
if (current == null) {
current = newNode;
} else if (newNode.getValue().compareTo(current.getValue()) < 0) {
if (current.getLeft() == null) {
current.setLeft(newNode);
} else {
addNode(current.getLeft(), newNode);
}
} else if (newNode.getValue().compareTo(current.getValue()) > 0) {
if (current.getRight() == null) {
current.setRight(newNode);
} else {
addNode(current.getRight(), newNode);
}
}
}//end add
首先,您要分配 current = root;
,然后在下一行检查:
if (current == null)
这个条件总是 return 假(假设 root
不是 null
)。
您在 "else if" 中所做的很好,但您应该删除第一个 if
部分。
其次,您需要处理 root
为 null
的情况,最好在一个单独的方法中执行此操作,该方法首先检查 root 是否为 null,仅当它不是时才调用此方法(addNode) with root 和插入的节点
private void addNode(TreeNode<Type> current, TreeNode<Type> newNode) {
current = root;
if (current == null) {
current = newNode;
} else if (newNode.getValue().compareTo(current.getValue()) < 0) {
if (current.getLeft() == null) {
current.setLeft(newNode);
} else {
addNode(current.getLeft(), newNode);
}
看你一次又一次将当前点设置为根。这会导致 Whosebug,您不应指向 root。您可以这样更改它:您需要删除此行:
current = root
if(root == null){
root = newNode;
return;
}
所以我一直在尝试以递归方式向 BST 插入或添加节点,但我被难住了。我不断得到 线程异常 "main" java.lang.WhosebugError 我假设这是由递归引起的,但我不知道从这里去哪里,如果有人能提供帮助,我会喜欢一些方向。 :)
public void add(Type obj) {
TreeNode<Type> newNode = new TreeNode<Type>(obj);
if (root == null) {
root = newNode;
} else {
addNode(root, newNode);
}
}
private void addNode(TreeNode<Type> current, TreeNode<Type> newNode) {
current = root;
if (current == null) {
current = newNode;
} else if (newNode.getValue().compareTo(current.getValue()) < 0) {
if (current.getLeft() == null) {
current.setLeft(newNode);
} else {
addNode(current.getLeft(), newNode);
}
} else if (newNode.getValue().compareTo(current.getValue()) > 0) {
if (current.getRight() == null) {
current.setRight(newNode);
} else {
addNode(current.getRight(), newNode);
}
}
}//end add
首先,您要分配 current = root;
,然后在下一行检查:
if (current == null)
这个条件总是 return 假(假设 root
不是 null
)。
您在 "else if" 中所做的很好,但您应该删除第一个 if
部分。
其次,您需要处理 root
为 null
的情况,最好在一个单独的方法中执行此操作,该方法首先检查 root 是否为 null,仅当它不是时才调用此方法(addNode) with root 和插入的节点
private void addNode(TreeNode<Type> current, TreeNode<Type> newNode) {
current = root;
if (current == null) {
current = newNode;
} else if (newNode.getValue().compareTo(current.getValue()) < 0) {
if (current.getLeft() == null) {
current.setLeft(newNode);
} else {
addNode(current.getLeft(), newNode);
}
看你一次又一次将当前点设置为根。这会导致 Whosebug,您不应指向 root。您可以这样更改它:您需要删除此行:
current = root
if(root == null){
root = newNode;
return;
}