2014-11-12 2 views
0

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

Спасибо вам

ответ

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 
} 

Edit: я не имею репутации комментировать еще, поэтому я ограничен оказывающее правки. @ProgLearner, вам не нужна отдельная переменная u, потому что указатель на ваш узел является аргументом функции, и поэтому у вас будет новый доступ к каждому вызову функции. Аналогично, как сказал Джонатан Ми, переменная h не нуждается в внешней инициализации, потому что она также является локальной для функции. В тех случаях, когда вы не указываете начальное значение (например, когда вы вызываете его в корневом каталоге), оно будет по умолчанию равно -1.

+0

@ProgLearner По умолчанию 'setHeight' означает, что при вызове с корневым узлом параметр' h' не должен передаваться. –

+0

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

+0

@ Jonathan Mee, но затем, где вы собираетесь хранить temp h стоимость. Вы имеете в виду определение текущей высоты на основе текущего узла, а затем увеличение/уменьшение? – ProgLearner

Смежные вопросы