你如何处理二叉树中的重复?

时间:2015-04-23 05:55:12

标签: java binary-tree

这是它的测试部分,我一直得到2而不是fff的回报。     我需要在底部实现以返回重复项。 ?处理重复但不试图阻止它们插入,只需返回正确的值。

        System.out.println("\nInsering duplicate key: ...");
        tree.insert(2, "fff");
        testFind(tree.find(2), 2, "fff");

我需要处理重复项并返回上面的“fff”^测试代码底部需要进一步实现。

    public V find(K key) {
        Node node = findHelper(key, root);
        if (node == null) {
            return null;
        } else {
            return (V) node.entry.value;
        }
    }


    public Node findHelper(K key, Node node) {
        if (node.entry.key.compareTo(key) == 0) {
            return node;
        }
        else if (node.entry.key.compareTo(key) > 0) {
            if (node.leftChild == null) {
                return null;
            } else {
                return findHelper(key, node.leftChild);
            }
        } else if (node.entry.key.compareTo(key) < 0) {
            if (node.rightChild == null) {
                return null;
            } else {
                return findHelper(key, node.rightChild);
            }
        }
        return node;
    }

1 个答案:

答案 0 :(得分:1)

如果节点条目键等于查询,您还应继续在子节点中搜索:

public List<Node> findHelper(K key, Node node) {

    int c = node.entry.key.compareTo(key);

    if (c == 0) {
         List<Node> result = new ArrayList<>();
         result.add(node);
         result.addAll(findHelper(key, node.leftChild));
         result.addAll(findHelper(key, node.rightChild));
         return result;        

    } else if (c > 0) {
        if (node.leftChild == null) 
            return Collections.emptyList();
        else 
            return findHelper(key, node.leftChild);

    } else {
        if (node.rightChild == null) 
            return Collections.emptyList();
        else 
            return findHelper(key, node.rightChild);
    }
}