问题描述
|
我对以下代码有一个奇怪的问题。我编写代码来搜索树。
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”,并且代码返回的内容为空!
我猜没有人遇到过这种愚蠢的情况。请帮我!
解决方法
除非在第一个搜索调用中满足第一个if(...),否则您将不希望返回ѭ1other以外的任何内容,因为两次调用
search
的返回值都将被丢弃。
,您应该添加return
,例如:
return search(...);
这就是递归背后的概念。您正在调用该函数并进行递归,但是您忽略了递归调用的结果!因为您忽略它,所以代码完成了if
语句的处理,并像您告诉的那样继续返回null
。