Gut soviel ist mittlerweile klar.
Nun sitze ich vor der Funktion zum berechnen der Höhe eines Teilknotens. Der balance-Wert berechnet sich ja, in dem man die höhe des Linken Teilbaums von der Höhe des rechten Teilbaumes subtrahiert.
Wikipedia sagt, dies wird rekursiv gelöst, das habe ich auch gemacht. Die Funktionen sehen wie folgt aus:
Mein Gefühl sagt mir allerdings, dass da noch etwas fehlt, aber ich komme nicht drauf.
Könnt Ihr mir sagen, ob der Code so richtig ist? Ich habe momentan keine Möglichkeit das ganze zu testen, weswegen ich hier poste.
Gruß Christian
Nun sitze ich vor der Funktion zum berechnen der Höhe eines Teilknotens. Der balance-Wert berechnet sich ja, in dem man die höhe des Linken Teilbaums von der Höhe des rechten Teilbaumes subtrahiert.
Wikipedia sagt, dies wird rekursiv gelöst, das habe ich auch gemacht. Die Funktionen sehen wie folgt aus:
Code: [Auswählen]
unsigned int internal_calculate_avl_tree_balance_factor(avl_node_t *node)
{
unsigned int retval = 1;
/* if left and right node are NULL the lowest part has been reached */
if((node->left == NULL) && (node->right == NULL))
return(0);
else
{
if(node->right != NULL)
retval += internal_calculate_avl_tree_balance_factor(node->right);
if(node->left != NULL)
retval += internal_calculate_avl_tree_balance_factor(node->left);
}
return(retval);
}
/* Function calculates the new balance factor */
unsigned int calculate_avl_tree_balance_factor( avl_tree_t *tree, avl_node_t *node)
{
unsigned int retval1 = 0;
unsigned int retval2 = 0;
avl_node_t *left, *right, *local_node;
/* Check if node is NULL. This should never happen */
if(node == NULL)
panic("AVL Error: node contains NULL!\nNULL is not a valid address!");
if(tree->root_node == NULL)
{
return(0);
}
else
{
retval1 = internal_calculate_avl_tree_balance_factor(node->right);
retval2 = internal_calculate_avl_tree_balance_factor(node->left);
return( retval2 - retval1 );
}
}
Meine Logik sagt mir, das sollte so funktionieren...Mein Gefühl sagt mir allerdings, dass da noch etwas fehlt, aber ich komme nicht drauf.
Könnt Ihr mir sagen, ob der Code so richtig ist? Ich habe momentan keine Möglichkeit das ganze zu testen, weswegen ich hier poste.
Gruß Christian

Übersicht
Wiki
Hilfe
Suche
Einloggen
Registrieren
Drucken


Gespeichert


