我写了一个递归方法,该方法搜索BST
,将参数与节点中的string
属性进行比较,如果字符串匹配,则从该节点返回int
属性。该方法在其自己的类中调用时有效,但是,当我在另一个类中调用该方法时,该方法不再起作用。因此,基本上,该方法的private
部分有效,只是public
部分使我感到困惑。
public int boka(String ime) {
int bobo=boka(this.root,ime);
return bobo;
}
private int boka(Node curr_root,String ime){
if(curr_root==null){
return -1;
}
boka(curr_root.left,ime);
if(curr_root.info.ime.equalsIgnoreCase(ime)) {
return curr_root.info.pobjede;
}
boka(curr_root.right,ime);
return -1;
}
基本上,private
部分是有效的,但是,当我使用public
在另一个类中调用递归时,它总是返回-1
。
在另一堂课中,我正在这样做:
public static void main(String[] args) {
// TODO Auto-generated method stub
BinTree bt = new BinTree();
int a = bt.boka("Djole");
我省略了实际的Node制作和插入操作,因为我认为这无关紧要。
答案 0 :(得分:1)
您的搜索将始终返回-1
,因为您没有正确实现搜索。我不知道为什么在“它自己的类”中运行它时它会起作用,但是您需要返回递归调用的值。否则,您将在递归完成后返回-1
。
您可以对此进行调整,然后使其生效:
private int boka(Node curr_root,String ime){
if(curr_root.left != null) return boka(curr_root.left,ime);
if(curr_root.info.ime.equalsIgnoreCase(ime)) return curr_root.info.pobjede;
if(curr_root.right != null) return boka(curr_root.right,ime);
return -1;
}
答案 1 :(得分:0)
看起来好像不是在二叉搜索树中搜索(或者BST意味着什么?),它更像是对任意二叉树的有序遍历。
您可以使其正常运行,只是不要忽略递归中的返回值:
private int boka(Node curr_root,String ime){
if(curr_root==null) {
return -1;
}
int ret=boka(curr_root.left,ime);
if(ret!=-1) {
return ret
}
if(curr_root.info.ime.equalsIgnoreCase(ime)) {
return curr_root.info.pobjede;
}
return boka(curr_root.right,ime);
}