Bonjour,
Le troisième exemple d'implémentation d'insertion de noeuds dans un arbre AVL m'est offert par TheCrazyProgrammer (voir sous Liens).
La fonction "insert" ressemble assez à celle de l'implémentation de GitHub.
Ces deux programmes vont m'influencer pour ma prochaine proposition personnelle "ArbreAVL: B-Insertion-Améliorée-Bis".
node * insert(node *T,int x)
{
if(T==NULL)
{
T=(node*)malloc(sizeof(node));
T->data=x;
T->left=NULL;
T->right=NULL;
}
else
if(x > T->data) // insert in right subtree
{
T->right=insert(T->right,x);
if(BF(T)==-2)
if(x>T->right->data)
T=RR(T);
else
T=RL(T);
}
else
if(x<T->data)
{
T->left=insert(T->left,x);
if(BF(T)==2)
if(x < T->left->data)
T=LL(T);
else
T=LR(T);
}
T->ht=height(T);
return(T);
}
Comme d'habitude, cette implémentation est complétée d'une interface "utilisable" qui permet d'ajouter une valeur donnée, d'ajouter une valeur aléatoire, de rechercher un nœud de valeur donnée et d'afficher sur demande l'arbre AVL en couleur sur la console.
De plus, après chaque insertion, l'arbre est "vérifié".
Bonne lecture ...
Liens
WikipédiA: Arbre AVL
WikipediA: AVL tree
CodeS-SourceS: ArbreAVL: A-Insertion (GeeksforGeeks)
CodeS-SourceS: ArbreAVL: A-Insertion (GitHub)
TheCrazyProgrammer: Program for AVL Tree in C
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.