我有这个用Java编写的二叉搜索树。它似乎工作正常。但是,在调用多个add调用时,我收到StackOverFlow错误。我正在学习用Java编写。有人可以告诉我我做错了吗?
d = []
...
d.append(text)
答案 0 :(得分:0)
堆栈溢出是由于无限递归循环而发生的,这是由left
参数被忽略而有利于根节点引起的。
添加节点1时会出现错误,因为根节点3已经有一个左子节点2和右子节点4.因此,该方法执行递归调用以尝试将节点1添加为左或右子节点节点2,但是当它重新进入方法时,它会忽略节点2,并尝试再次将节点1安装在根节点3下,并且这种情况一直在继续。
public Node<E> addNode(Node<E> left, E e) {
//lets start with root
// if (root == null)
// createRoot(e, null, null);
// Node<E> focusNode = root; // <-- wrong
Node<E> focusNode = left; // <-- correct
//Node<E> newLeft
Node<E> newNode = new Node<E>(e);
//while(true)
if (e.compareTo(focusNode.e) < 0) {
if (focusNode.getLeft() == null) {
focusNode.setLeft(newNode);
size++;
} else {
focusNode = focusNode.getLeft();
addNode(focusNode,e); // <-- uncomment this line
}
} else if (e.compareTo(focusNode.e) >= 0) {
if (focusNode.getRight() == null) {
focusNode.setRight(newNode);
size++;
} else {
focusNode = focusNode.getRight();
addNode(focusNode,e); // <-- uncomment this line
}
}
return focusNode;
}