Java 在二叉搜索树中插入重复的键?
现在,当我将键/值插入BST,然后搜索它们时,我会得到空值。我想得到一些关于如何处理重复钥匙的帮助Java 在二叉搜索树中插入重复的键?,java,binary-search-tree,Java,Binary Search Tree,现在,当我将键/值插入BST,然后搜索它们时,我会得到空值。我想得到一些关于如何处理重复钥匙的帮助 private Node put(Node root, final Key key, final Value value) { if (root == null) return new Node(key, value, 1); final int result = key.compareTo(root.key); if (result >
private Node put(Node root, final Key key, final Value value) {
if (root == null)
return new Node(key, value, 1);
final int result = key.compareTo(root.key);
if (result > 0)
root.right = put(root.right, key, value);
else if (result <= 0) {
root.left = put(root.left, key, value);
}
root.size = size(root.left) + size(root.right) + 1;
return root;
}
private Value get(final Node root, final Key key) {
if (root == null)
return null;
final int result = key.compareTo(root.key);
if (result > 0)
return get(root.right, key);
else if (result <= 0)
return get(root.left, key);
return root.value;
}
private Node put(节点根、最终密钥、最终值){
if(root==null)
返回新节点(键,值,1);
最终int结果=key.compareTo(root.key);
如果(结果>0)
root.right=put(root.right,key,value);
else if(结果0)
返回get(root.right,key);
else if(resultget代码需要==检查。0)
返回get(root.right,key);
否则如果(结果<0)
返回get(root.left,key);
否则如果(结果==0)
返回root.value;
其他的
返回null;//找不到密钥
}
您的get代码需要==检查。您的帐户(0)
返回get(root.right,key);
否则如果(结果<0)
返回get(root.left,key);
否则如果(结果==0)
返回root.value;
其他的
返回null//找不到密钥
}
谢谢,现在我只收到第一份副本。我是否也必须更改put方法中的某些内容?您是说要在二进制搜索树中插入具有不同值的重复键?这不是二进制搜索树的工作原理。请看,这正是我想要的,但我很难实现它。这违反了二进制搜索规则。应阻止重复键或替换旧值。通常会替换旧的值。如果希望每个键有多个值,可以使每个节点都有一个值列表values=new ArrayList(),而不是一个值。当您插入时,您将添加到该列表中。这可以达到你想要的,但我仍然觉得这是不明智的。谢谢,现在我只得到了第一份副本。我是否也必须更改put方法中的某些内容?您是说要在二进制搜索树中插入具有不同值的重复键?这不是二进制搜索树的工作原理。请看,这正是我想要的,但我很难实现它。这违反了二进制搜索规则。应阻止重复键或替换旧值。通常会替换旧的值。如果希望每个键有多个值,可以使每个节点都有一个值列表values=new ArrayList(),而不是一个值。当您插入时,您将添加到该列表中。这可以实现你想要的,但我仍然觉得这是不明智的。
private Value get(final Node root, final Key key) {
if (root == null)
return null;
final int result = key.compareTo(root.key);
if (result > 0)
return get(root.right, key);
else if (result < 0)
return get(root.left, key);
else if (result == 0)
return root.value;
else
return null; //key not found
}