2010-10-12 16 views
1

Après avoir effectué une rotation pour équilibrer un arbre AVL, immédiatement après une insertion, comment puis-je modifier le facteur d'équilibre de tous les nœuds parents (de manière appropriée, par -1 ou 1)?Recalcul du facteur d'équilibre dans l'arbre AVL

Chaque nœud de l'arbre AVL a la structure suivante:

typedef struct _avlTree 
{ 
nutbolt part; 
int balanceFactor; 
struct _avlTree *left,*right; 
} *avlTree; 

J'ai mis le facteur d'équilibre selon la définition donnée sur Wikipedia. Dois-je avoir un pointeur sur le nœud parent de chaque nœud?

+0

Êtes-vous le code AVL en œuvre, ou utilisez-vous quelqu'un d'autre le code AVL? –

+0

Essayer d'implémenter son propre code. –

+0

bien quelqu'un semble avoir volé votre déclaration de structure de données alors. –

Répondre

2

Vous avez besoin d'un pointeur parent pour chaque noeud, ce qui nécessitera également des modifications lorsque vous modifiez la structure arborescente. Ou vous devez garder une trace de tous les nœuds visités à partir de la racine, soit automatiquement par la récursion, soit manuellement dans un tableau si vous avez une approche itérative.

Vous ne devriez pas manquer pour une étude approfondie du sujet:

http://www.stanford.edu/~blp/avl/