Алгоритм для возврата длины кратчайшей ветви в бинарном дереве

голоса
0

Бинарное дерево может быть закодирован с использованием двух функций л и г, что для узла п, л (п) дают левый дочерний п, г (п) дать правильный ребенка п.

Ветвь дерева представляет собой путь от корня к листу, длина ветви к конкретному листу этого числа дуг на пути от корня до этого листа.

Пусть MinBranch (л, г, х) простой рекурсивный алгоритм для принятия двоичного дерева, кодируемого л и г функциями вместе с корневым узлом х для двоичного дерева и возвращает самую короткую ветвь двоичного дерева.

Просьба предоставить псевдокод этого алгоритма.

Задан 03/08/2009 в 04:30
источник пользователем
На других языках...                            


4 ответов

голоса
4

Посмотрите на обеих ветвях. Найти длину кратчайшего пути в каждом. Добавьте один к меньшему и считаю, что это самая короткая ветвь.

Ответил 03/08/2009 в 04:31
источник пользователем

голоса
0
function recurseMin(n)
{
if r(n) is null and l(n) is null, return 1
if r(n) is not null, rightSum = recurseMin( r(n-1) )
if l(n) is not null, leftSum = recurseMin ( l(n-1) )
return 1 + min( leftSum, rightSum )
}
Ответил 03/08/2009 в 04:34
источник пользователем

голоса
5

Я вижу , что вы получили ответы о том , как получить длину кратчайшей ветви, но ваше домашнее задание на самом деле вернуть ветвь самого, по- видимому , как список узлов. Итак, вот исполняемый псевдокод (то есть, Python) на самом деле вернуть ветвь, используя Noneдля обозначения нуля:

def MinBranch(l, r, x):
  if x is None: return []
  left_one = MinBranch(l, r, l(x))
  right_one = MinBranch(l, r, r(x))
  if len(left_one) < len(right_one):
    tail = left_one
  else:
    tail = right_one
  return [x] + tail
Ответил 03/08/2009 в 04:48
источник пользователем

голоса
1

Вы также можете найти его в O (2 R ) , где R представляет собой результат. Полезно , если дерево очень несбалансированное или бесконечен. Это <= O (N).

Вы можете сделать это с помощью итерационного-углубления ДФС.

Ответил 03/08/2009 в 13:51
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more