Je cherche la meilleure façon de calculer un solde de nœuds dans un système de gestion de l'information. Arbre AVL . Je pensais l'avoir fait fonctionner, mais après quelques insertions et mises à jour importantes, je constate qu'il ne fonctionne pas correctement (du tout).
Il s'agit d'une question en deux parties, la première étant comment calculer la hauteur d'un sous-arbre, je connais la définition. "La hauteur d'un nœud est la longueur du plus long chemin descendant vers une feuille à partir de ce nœud." et je le comprends, mais je n'arrive pas à le mettre en œuvre. Et pour m'embrouiller encore plus, cette citation se trouve sur wikipedia sur la hauteur des arbres "Par convention, la valeur -1 correspond à un sous-arbre ne comportant aucun nœud, tandis que zéro correspond à un sous-arbre comportant un nœud."
Et la deuxième partie consiste à obtenir le facteur d'équilibre d'un sous-arbre dans un arbre AVL, je n'ai aucun problème à comprendre le concept, "obtenir la hauteur de votre L
y R
sous-arbres et soustraire R
de L
" . Et ceci est défini comme quelque chose comme ceci : BALANCE = NODE[L][HEIGHT] - NODE[R][HEIGT]
La lecture sur wikipedia dit ceci sur les premières lignes décrivant les insertions dans un arbre AVL : "Si le facteur d'équilibre devient -1, 0 ou 1, alors l'arbre est toujours sous forme AVL, et aucune rotation n'est nécessaire."
Il poursuit ensuite en disant ceci "Si le facteur d'équilibre devient 2 ou -2, alors l'arbre enraciné à ce nœud est déséquilibré, et une rotation de l'arbre est nécessaire. Au maximum, une rotation simple ou double sera nécessaire pour équilibrer l'arbre." - ce que je n'ai aucun mal à comprendre.
Mais (oui, il y a toujours un mais).
C'est là que ça devient confus, le texte dit "Si le facteur d'équilibre de R est égal à 1, cela signifie que l'insertion a eu lieu sur le côté droit (externe) de ce nœud et qu'une rotation vers la gauche est nécessaire". . Mais d'après ce que j'ai compris, le texte disait (comme je l'ai cité) que si le facteur d'équilibre se situait dans les limites de l'UE, il n'y avait pas de problème. [-1, 1]
alors il n'y avait pas besoin d'équilibrage ?
J'ai l'impression d'être si proche de la compréhension du concept, j'ai mis au point les rotations d'arbres, implémenté un arbre de recherche binaire normal, et je suis sur le point de comprendre les arbres AVL, mais il me semble qu'il me manque cette épiphanie essentielle.
Editar: Je préfère les exemples de code aux formules académiques, car j'ai toujours eu plus de facilité à comprendre quelque chose en code, mais toute aide est la bienvenue.
Editar: J'aimerais pouvoir marquer toutes les réponses comme "acceptées", mais pour moi, la réponse de NIck est la première qui m'a fait "aha".