我有一个BSTD实现,它错误地插入值,我无法找到我的生活。
EXPECTED ACTUAL
-------- ----------
Alex Janice
Carlos Janice
Elton Janice
Janice Zidane
Zidane Zidane
实施
private Node<K,E> insert(Node<K,E> node, K key, E elem) {
if (node == null) {
return new Node<K,E>(null, key, elem, null);
}
if (key.compareTo(node.getKey()) < 0) {
return new Node<K, E>(insert(node.getLeft(), key, elem), key, elem, node.getRight());
}
else if (node.getKey().equals(key)) {
return node;
}
else {
return new Node<K, E>(node.getLeft(), key, elem, insert(node.getRight(), key, elem));
}
}
我已经尝试了一个多小时的调试,没有运气,任何想法我的递归出错了?
答案 0 :(得分:2)
这是新节点,应该从节点中获取其内容。
必须是等于/比较。更加可靠的代码是:
int comparison = key.compareTo(node.getKey());
if (comparison < 0) {
return new Node<K, E>(
insert(node.getLeft(), key, elem),
node.getKey(), node.getElem(),
node.getRight());
}
else if (comparison == 0) {
return node;
}
else {
return new Node<K, E>(
node.getLeft(),
node.getKey(), node.getElem(),
insert(node.getRight(), key, elem));
}
这仅依赖于compareTo。