这是它的测试部分,我一直得到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;
}
答案 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);
}
}