2014-01-26 3 views
-2

Я пытаюсь понять алгоритм .. Я думаю, что это самый короткий путь от p до q, но это не всегда верно (p, q два узла в бинарное дерево).Я пытаюсь понять, что делает алгоритм

c <- 0 
    while p ≠ q 
     if right[p] ≠ NULL 
     p <- right[p] 
     while left[p] ≠ NULL 
      p <- left[p] 
     else 
     if left[p] = NULL 
      c <- c + 1 
     while p = right[parent[p]] 
      p <- parent[p] 
     p <- parent[p] 
    return c 

ответ

1

Он подсчитывает количество листьев между узлами p и q, если вы перемещаете узлы по порядку по их значениям.

+0

, алгоритм работает только в том случае, если дерево является деревом двоичного поиска или его не является matther? – user2976686

+0

«в порядке их значений», очевидно, не будет работать, если это не дерево поиска *, а код предполагает, что это * двоичный *. так в чем вопрос? –

+0

Он был помечен как BST. –

0

Он подсчитывает, сколько узлов нижнего уровня есть в дереве (т.е. те, у которых нет ни правых, ни левых детей). Обратите внимание, что 'c' увеличивается только для узлов, где это верно.

+0

Что делать, если p = q изначально? –

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