[英]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.