/*---------------------------------------------------------------------------- * * * AVLTREE 1.0 * (c) Werner Van Belle aug 95 * * * NODE_ADT AddAvlNode(NODE_ADT root, NODE_ADT who) * Voegt who toe aan root, geeft als resultaat de nieuwe root weer * O(log2n) * * NODE_ADT SearchAvlNode(NODE_ADT root, SEARCH_DATA_ADT watte) * Zoekt watte op in root, geeft als resultaat de bijhorende node weer * O(<log2n) * * NODE_ADT DeleteAvlNode(NODE_ADT root, SEARCH_DATA_ADT wie) * Verwijdert wie uit root, geeft als resultaat de nieuwe root weer * O(log2n) * * int ValidAvlTree(NODE_ADT root) * Controleert of de AVL-tree wel aan de AVL-voorwaarde voldoet. Hier * wordt niet gecontroleerd of de linkerkinderen kleiner zijn dan root * en de rechterkinderen groter zijn dan root * O(n) * * int AvlTreeCount(NODE_ADT root) * geeft weer hoeveel elementen in de tree steken. * O(n) * * int AvlDepth(NODE_ADT root) * geeft de maximum diepte van een pad doorheen de tree weer. * O(n) * * void PrintAvlTree(NODE_ADT root, int diepte) * Print de avltree. Deze functie is enkel aanwezig als PRINT_NODE * gedefinieerd is. Het output formaat is * .rechterkind * rootzelf * .linkerkind */ #ifndef NODE_ADT #error Type NODE must be specified #endif /* voorbeeld: * struct WoordKnoop { * struct WoordKnoop *left; * struct WoordKnoop *right; * int flag; * char *woord;}; * typedef struct WoordKnoop *TestNodeAdt; * #define NODE_ADT TestNodeAdt */ #ifndef LEFT_NODE #error Function LEFT_NODE must be specified #endif /* voorbeeld * #define LEFT_NODE(watte) (watte->left) */ #ifndef RIGHT_NODE #error Function RIGHT_NODE must be specified #endif /* voorbeeld * #define RIGHT_NODE(watte) (watte->right) */ #ifndef SET_LEFT_NODE #error Function SET_LEFT_NODE must be specified #endif /* voorbeeld * #define SET_LEFT_NODE(watte,to) (watte->left=to) */ #ifndef SET_RIGHT_NODE #error Function SET_RIGHT_NODE must be specified #endif /* voorbeeld * #define SET_RIGHT_NODE(watte,to) (watte->right=to) */ #ifndef POSITIVE_FLAG #error Function POSITIVE_FLAG must be specified #endif /* voorbeeld * #define POSITIVE_FLAG(watte) (watte->flag==1) */ #ifndef NEGATIVE_FLAG #error Funhction NEGATIVE_FLAG must be specified #endif /* voorbeeld * #define NEGATIVE_FLAG(watte) (watte->flag==-1) */ #ifndef ZERO_FLAG #error Function ZERO_FLAG must be specified #endif /* voorbeeld * #define ZERO_FLAG(watte) (watte->flag==0) */ #ifndef SET_ZERO_FLAG #error function SET_ZERO_FLAG must be specified #endif /* voorbeeld * #define SET_ZERO_FLAG(watte) (watte->flag=0) */ #ifndef SET_POSITIVE_FLAG #error function SET_POSITIVE_FLAG must be specified #endif /* voorbeeld * #define SET_POSITIVE_FLAG(watte) (watte->flag=1) */ #ifndef SET_NEGATIVE_FLAG #error function SET_NEGATIVE_FLAG must be specified #endif /* voorbeeld * #define SET_NEGATIVE_FLAG(watte) (watte->flag=-1) */ #ifndef NULLNODE #error Instance NULLNODE must exist #endif /* voorbeeld * #define NULLNODE NULL */ #ifndef ISNULLNODE #error Function ISNULLNODE must be specified #endif /* voorbeeld * #define ISNULLNODE(wie) (!wie) */ #ifndef SEARCH_DATA_ADT #error Type SEARCH_DATA_ADT must be specified #endif /* voorbeeld * #define SEARCH_DATA_ADT char* */ #ifndef COMPARE_ADD_DATA #error Function COMPARE_ADD_DATA must be specified #endif /* voorbeeld * #define COMPARE_ADD_DATA(w1,w2) (strcmp(w1->woord,w2->woord)) */ #ifndef COMPARE_SEARCH_DATA #error Function COMPARE_SEARCH_DATA must be specified #endif /* voorbeeld * #define COMPARE_SEARCH_DATA(inst,key) (strcmp(inst->woord,key)) */ #ifndef DELETE_NODE #error Function DELETE_NODE must be specified #endif /* voorbeeld * #define DELETE_NODE(wie) (free(wie)) */ NODE_ADT AddAvlNode(NODE_ADT root, NODE_ADT who); NODE_ADT SearchAvlNode(NODE_ADT root, SEARCH_DATA_ADT watte); NODE_ADT DeleteAvlNode(NODE_ADT root, SEARCH_DATA_ADT wie); int ValidAvlTree(NODE_ADT root); int AvlTreeCount(NODE_ADT root); int AvlDepth(NODE_ADT root); #ifdef PRINT_NODE /* voorbeeld * #define PRINT_NODE(wie) printf("[%c %s]",(wie->flag==1 ? '+' : (wie->flag==-1 ? '-' : '0')),wie->woord) */ void PrintAvlTree(NODE_ADT root, int diepte); #endif