我在java中编写了一个功能齐全的二叉搜索树,除了一个关键功能,即搜索。我正在使用逻辑,我将检查root是否为null,然后如果我要搜索的术语等于root(所以返回root)或> root(所以搜索右子树)或< root(搜索右子树)使用递归方法。通过调用searchBST(String)来启动搜索。
使用printlns查看发生了什么我发现如果值存在,它将通过正确的if语句(包括将BNode n设置为找到的值)但是由于某种原因将再次通过该方法(返回null) )。
此方法唯一有效的方法是搜索根节点时,这对我来说毫无意义。
public BNode search(BNode par, String k){
BNode n = null;
if (par != null){
if ((k.compareTo(par.obj.getKey()) < 0) && (par.left != null)){
search(par.left, k);
}
if ((k.compareTo(par.obj.getKey()) > 0) && (par.right != null)){
search(par.right, k);
}
if (k.compareTo(par.obj.getKey()) == 0){
n = par;
}
}
return n;
}
public AnyClass searchBST(String k){
if (search(root, k) != null)
return search(root, k).obj;
return null;
}
答案 0 :(得分:2)
我想你错过了一些回复陈述:
public BNode search(BNode par, String k){
BNode n = null;
if (par != null){
if ((k.compareTo(par.obj.getKey()) < 0) && (par.left != null)){
return search(par.left, k);
}
if ((k.compareTo(par.obj.getKey()) > 0) && (par.right != null)){
return search(par.right, k);
}
if (k.compareTo(par.obj.getKey()) == 0){
n = par;
}
}
return n;
}