繁体   English   中英

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

[英]How do you handle duplicates in 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;
    }

如果节点入口键等于查询,那么您也应该继续在子节点中搜索:

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);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM