BSTD inorder遍历产生错误行为

时间:2015-06-15 17:10:18

标签: java debugging recursion immutability

我有一个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));
    }
}

我已经尝试了一个多小时的调试,没有运气,任何想法我的递归出错了?

1 个答案:

答案 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。