所以我一直试图以递归方式向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
答案 0 :(得分:0)
首先,您要分配current = root;
,然后在您要检查的下一行:
if (current == null)
此条件将始终返回false(假设root
不是null
)。
你在“else if”中所做的事情是好的,但你应该删除第一个if
部分。
其次,你需要处理root
为null
的情况,最好先用一个单独的方法来检查root是否为null,只有当它是否为空时才调用此方法(addNode) )使用root和插入的节点
答案 1 :(得分:0)
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);
}
看你是一次又一次地设置当前点等于root。这导致StackOverFlow,你不应该指向root。您可以像这样更改它:您需要删除此行:
current = root
if(root == null){
root = newNode;
return;
}