Algorithme pour revenir longueur de la branche la plus courte dans un arbre binaire

voix
0

Un arbre binaire peut être codé en utilisant deux fonctions l et r de telle sorte que pour un noeud n, l (n) donner à l'enfant gauche de n, r (n) donner à l'enfant droit de n.

Une branche d'un arbre est un chemin à partir de la racine à une feuille, la longueur d'une branche à une feuille particulière est le nombre d'arcs sur le chemin de la racine à cette feuille.

Soit MinBranch (l, r, x) d'un simple algorithme récursif pour avoir un arbre binaire codé par les fonctions L et R en même temps que le noeud racine x de l'arbre binaire et renvoie la plus courte branche de l'arbre binaire.

S'il vous plaît fournir le pseudocode pour cet algorithme.

Créé 03/08/2009 à 04:30
source utilisateur
Dans d'autres langues...                            


4 réponses

voix
4

Regardez les deux branches. Trouvez la longueur du chemin le plus court dans chaque. Ajouter un à la plus petite et la considèrent comme la branche la plus courte.

Créé 03/08/2009 à 04:31
source utilisateur

voix
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 )
}
Créé 03/08/2009 à 04:34
source utilisateur

voix
5

Je vois que vous avez des réponses reçues sur la façon d'obtenir la longueur de la branche la plus courte, mais votre devoir à la maison est en fait de retourner la branche elle - même, sans doute comme une liste de nœuds. Alors, voici pseudocode exécutable (c. -à- Python) pour revenir en fait la branche, en utilisant Nonepour signifier 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
Créé 03/08/2009 à 04:48
source utilisateur

voix
1

Vous pouvez également le trouver dans O (2 R ) où R est le résultat. Utile si l'arbre est très déséquilibré ou infini. Il est <= O (N).

Vous pouvez le faire avec DFS itérative approfondissement.

Créé 03/08/2009 à 13:51
source utilisateur

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