AVL arbres solde
J'ai mis en place un arbre AVL, mais j'ai un problème.
Supposons que j'ai arbre suivant:
Et après l'ajout d'un autre nœud:
Maintenant je doit tourner node5 à gauche:
Mais après la rotation, il est encore déséquilibrée.
Où suis-je fait une erreur?
Elle nécessite une double rotation, rotation 11, puis 5.
Merci, je ne le sais pas. j'ai lu l'article de wikipedia, mais je ne comprends pas très bien comment faire pour déterminer double rotation est réinterrogée. Pouvez-vous l'expliquer d'une manière simple?
BTW 7 devrait être établi dans le bon noeud.
Pourquoi? c'est moins de 10, et je pense qu'il doit être sur la gauche.
LOL! Je ne sais pas, il est de 10. Je pensais que c'est 1. (l'une avec un point) Désolé!
Merci, je ne le sais pas. j'ai lu l'article de wikipedia, mais je ne comprends pas très bien comment faire pour déterminer double rotation est réinterrogée. Pouvez-vous l'expliquer d'une manière simple?
BTW 7 devrait être établi dans le bon noeud.
Pourquoi? c'est moins de 10, et je pense qu'il doit être sur la gauche.
LOL! Je ne sais pas, il est de 10. Je pensais que c'est 1. (l'une avec un point) Désolé!
OriginalL'auteur MRB | 2013-10-09
Vous devez vous connecter pour publier un commentaire.
Le scénario présenté est conforme à la Droite-Gauche cas de cet Wikipedia description.
Votre erreur, c'est que vous faites pivoter le déséquilibre de nœud (
5
) à la fois, sans d'abord effectuer une rotation de son sous-arbre.En général avoir
P
que le déséquilibre du nœud,L
comme sa gauche du sous-arbre etR
que son droit de sous-arbre, les règles suivantes doivent être suivies au moment de l'insertion:Donc parfois deux rotations doivent être effectuées, et parfois un seul.
C'est bien visualisée à Wikipédia:
La ligne du haut montre des situations quand les deux rotations sont nécessaires. La rangée du milieu présente les scénarios possibles lors d'une rotation est suffisante. Supplémentaires à des rotations de transformer n'importe quel haut de la ligne de scénario pour le moyen-ligne de scénario.
En particulier, pour cet arbre:
Après
7
est ajouté:L'équilibre de
5
est2
. Ceci est conforme au scénario marqué avec un commentaire ci-dessus dans le pseudo-code et aussi pour le haut de la ligne de scénario (celui de droite) dans le Wikipedia de l'image. Donc, avant de5
est à gauche-rotation, de son droit de sous-arbre11
doit être à droite-rotation:Et il devient:
Seulement maintenant, c'est le cas simple (de mi-ligne droite scénario dans le Wikipedia image) pour rétablir l'équilibre à
5
par un gauche-rotation:Et l'arbre devient équilibrée:
OriginalL'auteur BartoszKP
Permettez-moi d'essayer d'analyser de manière plus approfondie,
Pour un arbre binaire pour être avl arbres, la différence de hauteur de chaque nœud de toute la plus à gauche de la feuille à tout le plus à droite de la feuille doivent se trouver dans { -1, 0, 1}.
D'Insertion pour AVL:
Il y a quatre cas pour AVL insertion-
L - L
L - R
R - R
R - L
Maintenant,
le cas (a). [si le solde > 1] L-L(gauche de la gauche) d'Un nœud X viole l' { -1, 0, 1} et de contrainte
a gauche de la hauteur de plus de droite donne d'abord à gauche de L
a gauche sous l'enfant Y dont la gauche la hauteur est plus grande que la droite .. une fois de plus L
Action - Rotation autour de Y des aiguilles d'une montre. c'est à dire. une rotation à droite.
cas (b) (L-R cas)Supposons que Z nœud est inséré, pour Z, il est tout d'abord évalué, au cours de laquelle des feuilles, de gauche ou de droite, il est placé. Droit, si plus de poids, de Gauche si moins de poids.
dire, Z', nœud, wt(Z') > wt(Z), c'est à dire, Z' est insérée en tant que droit de l'enfant de Z, cas de la L - R, l'ensemble du lien ZZ " est tourné dans le sens anti horaire, maintenant, il est L-L affaire et donc résolu à l'aide de cas ci-dessus (a). c'est à dire. l'un à Gauche, puis une rotation à droite.
cas (c) [si le solde < -1] (R - R cas) de Même, R - R cas, il suffit d'appliquer la recherche binaire règle pour les ajustements et ce cas de travaux. c'est à dire. une rotation à gauche.
cas (d) (R - L cas), Il est d'abord converti en R-R cas et donc résolu à l'aide de cas ci-dessus (c). c'est à dire. une droite et une gauche rotation.
OriginalL'auteur hi.nitish