Algorytm, aby powrócić długość najkrótszej gałęzi w drzewie binarnym

głosy
0

Binarne drzewo może być kodowana przy użyciu dwóch funkcji L i R tak, że dla węzła n, l (n) dają w lewo dziecko n, r (n), w wyniku czego otrzymano odpowiedni N dziecko.

Gałąź drzewa jest ścieżka od korzenia do liścia, długość gałęzi do konkretnego liścia jest liczbą łuków na ścieżce od korzenia do tego liścia.

Niech MinBranch (L, R, x) będzie prosty rekurencyjny algorytm biorąc drzewa binarnego zakodowanego przez funkcje L i R razem z węzła głównego X na drzewo binarne i zwraca najkrótszą gałęzi drzewa binarnego.

Proszę podać Pseudokod dla tego algorytmu.

Utwórz 03/08/2009 o 04:30
źródło użytkownik
W innych językach...                            


4 odpowiedzi

głosy
4

Spójrz na obu oddziałów. Znajdź długość najkrótszej ścieżki w każdym. Dodasz do mniejszych i uważają, że jest to najkrótsza oddział.

Odpowiedział 03/08/2009 o 04:31
źródło użytkownik

głosy
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 )
}
Odpowiedział 03/08/2009 o 04:34
źródło użytkownik

głosy
5

Widzę Wysłaliśmy odpowiedzi, w jaki sposób uzyskać długość najkrótszego oddziału, ale twoja praca domowa jest rzeczywiście zwrócić oddział sam, przypuszczalnie jako lista węzłów. Tak więc, oto pseudokod wykonywalny (to znaczy, Python), aby rzeczywiście powrócić gałąź, używając Noneoznaczać wartość null:

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
Odpowiedział 03/08/2009 o 04:48
źródło użytkownik

głosy
1

Można również znaleźć w czasie O (2 R ), gdzie R jest wynik. Przydatne, jeśli drzewo jest bardzo niezrównoważony lub nieskończona. Jest <O (N).

Można to zrobić za pomocą iteracyjnego-pogłębienie DFS.

Odpowiedział 03/08/2009 o 13:51
źródło użytkownik

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