gpt4 book ai didi

java - 使用 Java 中的可比较递归地将节点添加到 BST

转载 作者:太空宇宙 更新时间:2023-11-04 10:59:15 25 4
gpt4 key购买 nike

所以我一直在尝试递归地向 BST 插入或添加节点,但我被难住了。我不断得到线程“main”中的异常 java.lang.StackOverflowError 我假设这是由递归引起的,但我不完全知道从这里去哪里,如果有人可以帮助提供它,我会喜欢一些方向。 :)

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

最佳答案

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

看你一次又一次地将当前点设置为根。这会导致StackOverFlow,你不应该指向root。您可以像这样更改它:您需要删除此行:

当前 = 根

if(root == null){
root = newNode;
return;
}

关于java - 使用 Java 中的可比较递归地将节点添加到 BST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47086425/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com