Высота установки BST на каждом указательном узле

0

Я пытаюсь реализовать рекурсивный метод для рекурсивной установки высоты в каждом узле. Частичное решение достигнуто, однако я не совсем уверен, где я мог бы уменьшить высоту и проверить, завершен ли определенный обход узла в порядке. Моя программа основана на этой реализации: http://visualgo.net/bst.html

спасибо

Теги:
search
binary-search-tree

1 ответ

2
Лучший ответ

Если вы имеете в виду для высоты здесь, чтобы представить уровень дерева, в котором находится узел, использование глобальной переменной даст вам довольно странные результаты. Я также признаю, что не совсем уверен, что вы делаете с переменной 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.

  • 0
    @ProgLearner Значение по setHeight для setHeight означает, что при вызове с корневым узлом параметр h не требуется передавать.
  • 0
    Благодарю. u представляет все узлы, поэтому он может где угодно в дереве. он будет содержать h, представляющий текущую высоту. Я не совсем уверен насчет struct node * r, int h = -1), я думаю, что h = -1 должен быть где-то инициализирован, а затем вы просто переходите к функции
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню