我对以下代码有一个奇怪的问题。我编写代码来搜索树。
public TreeNode<City> search(City parent, TreeNode<City> t){
if (t.getCity().equals(parent)) {
System.out.println("ccc");
return t;
}
else if (t.hasLeftChild()){
System.out.println("bbb");
search(parent,t.getLeftChild());
}
else if(t.hasNextSibling()){
System.out.println("aaa");
search(parent,t.getNextSibling());
}
return null;
}
奇怪的是:假设我的树中只有一个元素。然后,当我尝试向树中添加元素时,该方法可以正常工作。但是,当有两个元素(父母和孩子)并且我搜索孩子时,屏幕上打印的内容是“ccc”,代码返回的内容为null !!!
我想没有人会遇到过那种愚蠢的情况。请帮帮我!
答案 0 :(得分:1)
除非在第一次搜索调用中满足第一个if(...),否则您不希望返回null
以外的任何内容,作为两次调用{{1}的返回值被丢弃了。
答案 1 :(得分:1)
您应该添加return
,例如:
return search(...);
这就是递归背后的概念;你正在调用函数并递归,但你忽略了递归调用的结果!因为你忽略它,所以代码完成了if
语句并继续返回null
,就像你告诉它一样。