Я пытаюсь реализовать рекурсивный метод для рекурсивной установки высоты в каждом узле. Частичное решение достигнуто, однако я не совсем уверен, где я мог бы уменьшить высоту и проверить, завершен ли определенный обход узла в порядке. Моя программа основана на этой реализации: http://visualgo.net/bst.html
спасибо
Если вы имеете в виду для высоты здесь, чтобы представить уровень дерева, в котором находится узел, использование глобальной переменной даст вам довольно странные результаты. Я также признаю, что не совсем уверен, что вы делаете с переменной 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
}
Редактировать: у меня еще нет репутации, чтобы прокомментировать, поэтому я ограничусь ответом на изменения. @ProgLearner, вам не нужна отдельная переменная u
потому что указатель на узле является аргументом функции, и поэтому вы будете иметь свежий при каждом вызове функции. Аналогично, как сказал Джонатан Ми, переменная h
не нуждается в внешней инициализации, потому что она также локальна для функции. В случаях, когда вы не указываете начальное значение (например, когда вы вызываете его в корневом каталоге), по умолчанию он будет -1.
setHeight
дляsetHeight
означает, что при вызове с корневым узлом параметрh
не требуется передавать.