为什么return语句没有执行?

时间:2019-02-14 20:40:56

标签: java binary-tree

我正在尝试在二叉树中实现find方法。 当该方法需要返回一个值,但是即使在同一分号中要执行的其他行中,即使它似乎未执行该语句,也会出现问题。

public String find(Node currentNode, String value)
{
    if(isEmpty())
    {
        return null;
    }
    else
    {
        if(currentNode.getData().compareToIgnoreCase(value) == 0)
        {
            System.out.println("current -> "+currentNode.getData()); //showing
            return currentNode.getData(); //not executing
        }

        if(value.compareToIgnoreCase(currentNode.getData()) < 0)
        {
            find(currentNode.getLeft(), value);
        }
        else if(value.compareToIgnoreCase(currentNode.getData()) > 0)
        {
            find(currentNode.getRight(), value);
        }
    }

    return null; //always executing
}

我期望“ a”,但返回null。

2 个答案:

答案 0 :(得分:5)

执行该行时

find(currentNode.getLeft(), value);

您的语句return currentNode.getData();正在执行,但是您忽略了递归调用返回的内容。 (与getRight()语句类似。)然后,if / else语句完成,并执行底部的return null。这就是为什么您总是得到null的原因。

返回任何递归调用返回的内容,以便返回的值正确传播回原始调用,例如:

return find(currentNode.getLeft(), value);

答案 1 :(得分:0)

您必须使用返回递归调用的数据,现在您正在忽略它。同样,无论如何,您总是返回null,这是程序的固定版本:

public String find(TreeNode currentNode, String value) {
    if (currentNode == null) {
        return null;
    }

    if(currentNode.getData().compareToIgnoreCase(value) == 0) {
        return currentNode.getData(); //not executing
    }

    if (currentNode.getData().compareToIgnoreCase(value) > 0) {
        return find(currentNode.getLeft(), value);
    } else {
        return find(currentNode.getRight(), value);
    }
}