如何从返回值的函数中返回任何内容?

时间:2013-12-16 22:22:55

标签: java binary-search-tree

我有一个二叉搜索树,我想删除一个节点。

我需要得到它的父母,所以我写了一个函数:

private BSTreeNode<T> getParent(BSTreeNode<T> root, BSTreeNode<T> node) {
        if(root == null) 
            return null;
        if(node.element().lessThan(root.element())) {
            if(root.getLeft() != null && root.getLeft().element().equal(node.element())) 
                return root;
            else
                getParent(root.getLeft(), node);
        } else {
            if(root.getRight() != null && root.getRight().element().equal(node.element()))
                return root;
            else
                getParent(root.getRight(), node);
        }
    }

与C / C ++不同,Java给出了以下错误:

This method must return a result of type BSTreeNode<T>

它强制我在函数的最后一行返回一个值。

如何在我的功能环境中修复它?

3 个答案:

答案 0 :(得分:3)

您的功能在任何可能的情况下都没有回报。你有:

if (null)...

if (less than root)...
else ( if ...)
       else (no return!)

如果它不为空,你会返回什么,然后去最后的其他地方?没有任何回报。

您可以在else语句中return getParent...。或函数末尾的return null(不在if或else语句中)

我经常看到这样的代码来覆盖if语句都没有返回值的事件。

public int getAnswer()
{
    if (answer.equals("yes"))
        return 0;
    else if (answer.equals("no"))
        return 1;

    return null;
}

答案 1 :(得分:2)

你应该对此很好:

private BSTreeNode<T> getParent(BSTreeNode<T> root, BSTreeNode<T> node) {
    if(root == null) 
        return null;
    if(node.element().lessThan(root.element())) {
        if(root.getLeft() != null && root.getLeft().element().equal(node.element())) 
            return root;
        else
            return getParent(root.getLeft(), node);
    } else {
        if(root.getRight() != null && root.getRight().element().equal(node.element()))
            return root;
        else
            return getParent(root.getRight(), node);
    }
}

答案 2 :(得分:-1)

添加返回null;方法结束时的陈述。 我认为这个语句在正常情况下是无法访问的,但添加它只是为了修复编译错误并尝试将会发生什么。

private BSTreeNode<T> getParent(BSTreeNode<T> root, BSTreeNode<T> node) {
        if(root == null) 
            return null;
        if(node.element().lessThan(root.element())) {
            if(root.getLeft() != null && root.getLeft().element().equal(node.element())) 
                return root;
            else
                getParent(root.getLeft(), node);
        } else {
            if(root.getRight() != null && root.getRight().element().equal(node.element()))
                return root;
            else
                getParent(root.getRight(), node);
        }
return null;
    }