Algoritme for å returnere lengden av korteste gren i et binært tre

stemmer
0

Et binært tre kan kodes ved hjelp av to funksjoner l og r slik at for en node n, l (n) gi den venstre barn av n, r (n) gir rett barn av n.

En gren av et tre er en bane fra roten til et blad, lengden av en gren til en bestemt blad er antallet buer på banen fra roten til det blad.

La MinBranch (l, r, x) være en enkel rekursiv algoritme for å ta et binært tre kodet av L- og R-funksjoner sammen med rotnoden x for den binære treet og returnerer den korteste gren av det binære treet.

Vennligst gi pseudo for denne algoritmen.

Publisert på 03/08/2009 klokken 03:30
kilden bruker
På andre språk...                            


4 svar

stemmer
4

Se på begge grener. Finn lengden av den korteste veien i hver. Legg den ene til den mindre og anser det å være den korteste gren.

Svarte 03/08/2009 kl. 03:31
kilden bruker

stemmer
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 )
}
Svarte 03/08/2009 kl. 03:34
kilden bruker

stemmer
5

Jeg ser du har fått svar på hvordan å få lengden av den korteste gren, men din hjemmelekse er faktisk å returnere gren selv, antagelig som en liste med noder. Så, her er kjørbar pseudokode (dvs. Python) å faktisk gå tilbake grenen, hjelp Nonetil å bety 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
Svarte 03/08/2009 kl. 03:48
kilden bruker

stemmer
1

Du kan også finne det i O (2 R ), hvor R er resultatet. Nyttig hvis treet er svært ubalansert eller uendelig. Det er <= O (N).

Du kan gjøre dette med iterativ-utdype DFS.

Svarte 03/08/2009 kl. 12:51
kilden bruker

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