почему оператор возврата не выполняется? - PullRequest
0 голосов
/ 14 февраля 2019

Я пытаюсь реализовать метод поиска в двоичном дереве.Проблема возникает, когда метод должен возвратить значение, но кажется, что он не выполняет этот оператор, даже если есть другие строки в той же точке с запятой, которая выполняется.

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», но возвращает ноль.

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Вы должны использовать данные, которые возвращают ваш рекурсивный вызов, сейчас вы игнорируете его.Также вы всегда возвращаете 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);
    }
}
0 голосов
/ 14 февраля 2019

Когда вы выполняете строку

find(currentNode.getLeft(), value);

Ваш оператор return currentNode.getData(); выполняется, но вы игнорируете то, что возвратил ваш рекурсивный вызов.(Аналогично для оператора getRight().) Затем оператор if / else завершается и выполняется return null внизу.Вот почему вы всегда получаете null.

Вернуть все, что возвращает рекурсивный вызов, так что возвращаемое значение должным образом распространяется обратно на исходный вызов, например:

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