Не вдаваясь в детали атрибутов переменных, я просто отмечу, что вы написали рекурсивную функцию, которая возвращает переменную.Я предлагаю вам на самом деле использовать этот возврат и делать все необходимое, чтобы присвоить значение в конце.Что-то вроде
public static double time(TreeNode<City> tree{
double thistime = 0.0;
City A = tree.getCity();
if (tree.hasLeftChild()){
thistime += tree.getLeftChild().getCity().distance(A);
thistime += time(tree.getLeftChild());
}
if (tree.hasNextSibling()){
thistime += tree.getNextSibling().getCity().distance(A);
thistime += time(tree.getNextSibling());
}
return thistime;
}
Затем, когда вы его вызываете;
time = time(root);
printf("Time is %f, actual time should be %f\n",time,time(root));
В конце printf просто помогает выяснить, есть ли какая-то проблема назначения атрибута по сравнению с ошибкой вфункция против чего-то еще.
Код должен стараться избегать обновления переменных вне области кода, когда это возможно.Делает для большей безопасности в случае преобразования в многопоточность, обработку сигналов, отладку и, как правило, предотвращает жуткие действия на расстоянии.
Я отмечу в вашем примере кода, что вы явно пропускаете близкого родителя вопределение функции.