我是递归的新手,我不明白为什么这个功能不会编译。它显然缺少一份退货声明。从测试来看,似乎我的返回语句不会返回?
// recursive search method
public BinaryTree<T> recursiveSearch(BinaryTree<T> t, T key) {
if (key.compareTo(t.getData()) < 0) {
if (t.getLeft() != null) {
recursiveSearch(t.getLeft(), key);
} else {
return null;
}
} else if (key.compareTo(t.getData()) > 0) {
if (t.getRight() != null) {
recursiveSearch(t.getRight(), key);
} else {
return null;
}
} else if (key.compareTo(t.getData()) == 0) { // key is found
return t;
} else { // not in binary tree
return null;
}
}
答案 0 :(得分:5)
问题出现在进行递归调用的if
分支内部。
您的代码在到达任何else
分支时都会正常运行,因为它们都有return null
。但是,如果代码采用其中一个if
分支,则控件将在未命中return
的情况下到达方法的末尾。修复很简单 - 添加缺少的return
s:
return recursiveSearch(t.getRight(), key);
答案 1 :(得分:2)
是的,它缺少递归语句的return语句。
public BinaryTree<T> recursiveSearch(BinaryTree<T> t, T key)
{
if (key.compareTo(t.getData())<0){
if (t.getLeft() != null) {
recursiveSearch(t.getLeft(), key); // This case doesn't return anything
} else { return null;}
} else if (key.compareTo(t.getData())>0) {
if (t.getRight() != null) {
recursiveSearch(t.getRight(), key); // This case doesn't return anything
} else {return null;}
} else if (key.compareTo(t.getData())==0){ // key is found
return t;
} else {
//not in binary tree
return null;
}
}
我不知道你的程序逻辑,但如果我不得不猜测,你可能想在递归调用中添加一个return语句。像这样,
return recursiveSearch(t.getLeft(), key);
和
return recursiveSearch(t.getRight(), key);