递归函数缺少返回语句

时间:2015-11-09 20:00:34

标签: java recursion binary-search-tree

我是递归的新手,我不明白为什么这个功能不会编译。它显然缺少一份退货声明。从测试来看,似乎我的返回语句不会返回?

// 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;
    }
}

2 个答案:

答案 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);