递归函数缺少返回语句

Dum*_*314 2 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

das*_*ght 5

问题if在于进行递归调用的分支内部的行.

当您的代码到达任何else分支时,它们的行为都会正确,因为它们都具有return null.if但是,如果代码采用其中一个分支,则控件将到达方法的末尾而不会触及return.修复很简单 - 添加缺少的returns:

return recursiveSearch(t.getRight(), key);
Run Code Online (Sandbox Code Playgroud)