首页 > 解决方案 > 为什么返回语句没有执行?

问题描述

我正在尝试在二叉树中实现 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。

标签: javabinary-tree

解决方案


当您执行该行时

find(currentNode.getLeft(), value);

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

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

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

推荐阅读