Algoritmul pentru a reveni lungime de ramura cea mai scurtă într-un arbore binar

voturi
0

Un arbore binar poate fi codat folosind două funcții l și r astfel încât pentru un nod n, l (n) da copilului stâng al n, r (n) da copilului dreptul de n.

O ramură a unui copac este o cale de la rădăcină la o frunză, lungimea unei ramuri la o anumită frunză este numărul de arce pe drumul de la rădăcină la acea frunză.

Să MinBranch (l, r, x) un algoritm recursiv simplu pentru a lua un arbore binar codificat de funcțiile l și r împreună cu nodul rădăcină x pentru arborele binar și returnează cel mai scurt ramură a arborelui binar.

Vă rugăm să furnizați Pseudocodul pentru acest algoritm.

Întrebat 03/08/2009 la 04:30
sursa de către utilizator
În alte limbi...                            


4 răspunsuri

voturi
4

Uită-te la ambele ramuri. Găsiți lungimea cea mai scurtă cale în fiecare. Adăugați unul la cel mai mic și consideră că acesta este cel mai scurt ramura.

Publicat 03/08/2009 la 04:31
sursa de către utilizator

voturi
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 )
}
Publicat 03/08/2009 la 04:34
sursa de către utilizator

voturi
5

Văd că ai răspunsurile primite cu privire la modul de a obține lungimea de cel mai scurt ramura, dar misiunea ta este de fapt temele pentru a reveni ramura în sine, probabil ca o listă de noduri. Deci, aici e pseudocod executabil ( de exemplu, Python) pentru a reveni de fapt ramura, folosind Noneînseamnă nul:

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
Publicat 03/08/2009 la 04:48
sursa de către utilizator

voturi
1

Îl puteți găsi , de asemenea , în O (2 R ) , unde R este rezultatul. Util în cazul în care arborele este foarte dezechilibrat sau infinit. Este <= O (N).

Puteți face acest lucru cu iterativ-aprofundarea DFS.

Publicat 03/08/2009 la 13:51
sursa de către utilizator

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