Algoritme om de lengte van de kortste tak terug te keren in een binaire boom

stemmen
0

Een binaire boom kan worden gecodeerd met twee functies l en r zodanig dat voor een knooppunt n, l (n) geeft de linkerkind n, r (n) geeft de rechterkind n.

Een tak van een boom is een pad vanaf de wortel naar een blad, de lengte van een aftakking naar een bepaald blad het aantal bogen op het pad van de wortel naar dat blad.

Laat MinBranch (l, r, x) een eenvoudig recursief algoritme voor het nemen van een binaire boom gecodeerd door de l en r functies samen met het hoofdknooppunt x de binaire boom en geeft de kortste tak van de binaire boom.

Geef de pseudocode voor dit algoritme.

De vraag is gesteld op 03/08/2009 om 04:30
bron van user
In andere talen...                            


4 antwoorden

stemmen
4

Kijk naar beide takken. Vind de lengte van de kortste weg in elk. Voeg vandaag toe aan de kleinere en beschouwen het als de kortste tak zijn.

antwoordde op 03/08/2009 om 04:31
bron van user

stemmen
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 )
}
antwoordde op 03/08/2009 om 04:34
bron van user

stemmen
5

Ik zie dat je hebt ontvangen antwoorden over hoe je het krijgen lengte van de kortste tak, maar je huiswerk opdracht is eigenlijk om het terug te keren tak zelf, vermoedelijk als een lijst van knooppunten. Dus, hier is uitvoerbaar pseudocode (dat wil zeggen, Python) om daadwerkelijk de branche terug, met behulp van Noneop null betekenen:

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
antwoordde op 03/08/2009 om 04:48
bron van user

stemmen
1

U vindt het ook in O (2 R ) waarin R is het resultaat. Handig als de boom is zeer onevenwichtig of oneindig. Is <= O (N).

U kunt dit doen met iteratief verdiepen DFS.

antwoordde op 03/08/2009 om 13:51
bron van user

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