Если вы имеете в виду по высоте здесь, чтобы представить уровень дерева, что узел включен, с помощью глобальной переменной собирается дать вам довольно странные результаты , Я также признаю, что не совсем уверен, что вы делаете с переменной u
.
То есть, я думаю, вы должны быть в порядке с чем-то вроде этого:
public void setHeight(struct node *r, int h = -1) {
// pointer pointing to null, return
if(r == NULL) {
return;
}
h++; // increment height
r.height = h; // set update height to a current node
setHeight(r ->u.lc, h); // traverse the list pointing to the left child
visit(r) // visit pointing node
setHeight(r ->u.rc, h); // visit right child of the node
}
Edit: я не имею репутации комментировать еще, поэтому я ограничен оказывающее правки. @ProgLearner, вам не нужна отдельная переменная u
, потому что указатель на ваш узел является аргументом функции, и поэтому у вас будет новый доступ к каждому вызову функции. Аналогично, как сказал Джонатан Ми, переменная h
не нуждается в внешней инициализации, потому что она также является локальной для функции. В тех случаях, когда вы не указываете начальное значение (например, когда вы вызываете его в корневом каталоге), оно будет по умолчанию равно -1.
@ProgLearner По умолчанию 'setHeight' означает, что при вызове с корневым узлом параметр' h' не должен передаваться. –
Спасибо. u представляет все узлы, поэтому он может находиться где угодно в дереве. он будет содержать h, представляющий текущую высоту. Я не совсем уверен в struct node * r, int h = -1), я предполагаю, что h = -1 где-то нужно инициализировать, а затем вы просто переходите к функции – ProgLearner
@ Jonathan Mee, но затем, где вы собираетесь хранить temp h стоимость. Вы имеете в виду определение текущей высоты на основе текущего узла, а затем увеличение/уменьшение? – ProgLearner