Я использую рекурсивный метод для поиска узла в двоичном дереве с помощью ключа. Поэтому, когда я нахожу узел, я устанавливаю его в свою ссылочную переменную (foundNode) и возвращаю. Но проблема в том, что когда я читаю объект, его значение по-прежнему равно нулю. может кто-нибудь помочь.Невозможно установить ссылочную переменную в рекурсивном вызове
findGivenNode(root, key, foundNode, parentStack);
private boolean findGivenNode(Node node, int key, Node foundNode, Stack<Node> parentStack) {
if (node == null) {
return false;
}
parentStack.add(node);
if (node.getData() == key) {
foundNode = node;
return true;
}
boolean leftReturn = findGivenNode(node.getLeftChild(), key, foundNode, parentStack);
boolean RightReturn = findGivenNode(node.getRightChild(), key, foundNode, parentStack);
if (leftReturn || RightReturn) {
return true;
} else {
parentStack.pop();
return false;
}
}
спасибо за разъяснение, но, установив (foundNode = node), я пытаюсь получить ссылку на узел, у которого есть ключ, а не сам узел.Во-вторых, foundNode - это только ссылочная переменная, поэтому нельзя установить значение, вызвав любой из методов setter. –
Во второй части, да, это возможно. 'foundNode' указывает на узел, который вы хотите изменить, чтобы он имел доступ к методам этого узла. – nem035
Но изменение узла не является целью установки ссылочной переменной на этот узел. Все, что мне нужно, это ссылка на этот узел. который я не получаю, если я не делаю что-то вроде 'foundNode = node; return foundNode; 'И изменить тип возвращаемого метода из' void' в 'Node'. –