Хорошо, поэтому мне нужно создать рекурсивный метод подсчета узлов в дереве, и я сделал это (имена переменных на португальском языке, извините):
public int contaNos(Arvbin r) {
Integer cardinalidade = 0;
contaNosPrivado(r, cardinalidade);
return cardinalidade;
}
private void contaNosPrivado(Arvbin r, Integer cardinalidade) {
if (r==null) {
return;
}
cardinalidade=cardinalidade+1;
contaNosPrivado(r.esq, cardinalidade);
contaNosPrivado(r.dir, cardinalidade);
return;
}
Arvbin - это двоичное дерево,esq и dir - это левая и правая ссылки на ветви дерева.
Я думал, что это сработает, но по какой-то причине, когда я пытаюсь запустить его, он возвращает 0. Я использовал немного отладкии я думаю, что проблема в том, что когда методы заканчивают и возвращаются к исходному нерекурсивному, переменная cardinalidade устанавливается в 0. Я не уверен, что это потому, что автобокс портит мой Integer и превращает его в intи затем, когда я вызываю метод, он передает копию значения вместо ссылки на существующий объект, и я не знаю, как это исправить.Если бы кто-нибудь мог помочь, я был бы очень признателен