我在Java中使用二进制搜索树作业,在那里我获得了完整的Tree和Node类以及一个SearchTree类,我将在其中完成搜索和插入方法。搜索应该返回与搜索到的密钥对应的节点的值。
Here是Tree类,here是Node类。我的搜索和插入方法如下。
似乎我越来越近了,但是将键0和值2插入到Tree [Node [0,1,null,null]]中会导致Tree [Node [0,1,null,null]而不是正确的Tree [Node [0,2,null,null]]。我在这里不理解什么?
public static Object search(Tree tree, int key) {
Node x = tree.getRoot();
while (x != null) {
if (key == x.getKey()) {
return x.getValue();
}
if (key < x.getKey()) {
x = x.getLeft();
} else {
x = x.getRight();
}
}
return null;
}
public static void insert(Tree tree, int key, Object value) {
if (tree.getRoot() == null) {
tree.setRoot(new Node(key, value));
}
Node juuri = tree.getRoot();
while (juuri != null) {
if (key == juuri.getKey()) {
return;
} else if (key < juuri.getKey()) {
if (juuri.getLeft() == null) {
juuri.setLeft(new Node(key, value));
return;
} else {
juuri = juuri.getLeft();
}
} else {
if (juuri.getRight() == null) {
juuri.setRight(new Node(key, value));
return;
} else {
juuri = juuri.getRight();
}
}
}
}
答案 0 :(得分:0)
我看到的问题是树中的键值是唯一的。在此if语句中,如果您发现密钥已经在树中,则在不添加节点的情况下保留insert
方法。
if (key == juuri.getKey()) {
return;
}
在你的例子中(如果我理解正确的话)0已经在树中,所以当再次插入0时没有任何改变。根据您的示例,我假设您希望在密钥相同的情况下对节点进行更新。所以这段代码就可以了。
if (key == juuri.getKey()) {
juuri.setValue(value);
return;
}