diff --git a/bintree.c b/bintree.c index 09623cd..ebd01f2 100644 --- a/bintree.c +++ b/bintree.c @@ -7,6 +7,7 @@ static StackNode *push_left(TreeNode *node, StackNode *stack); +/* Vergleichsfunktion */ int compareFct(const void *argument1, const void *argument2) { int x = *((int *)argument1); @@ -19,6 +20,7 @@ int compareFct(const void *argument1, const void *argument2) return 0; } +/* Erzeugt einen neuen Baumknoten mit Kopie der Daten */ static TreeNode *create_node(const void *data, size_t data_size) { TreeNode *node = malloc(sizeof(TreeNode)); @@ -43,6 +45,7 @@ static TreeNode *create_node(const void *data, size_t data_size) return node; } +/* Fügt ein Element in den Baum ein */ TreeNode *addToTree(TreeNode *root, const void *data, size_t dataSize, CompareFctType compareFct, int *isDuplicate) { @@ -72,29 +75,34 @@ TreeNode *addToTree(TreeNode *root, const void *data, size_t dataSize, return root; } +/* Iterator über den Baum (Inorder-Traversierung) */ void *nextTreeData(TreeNode *root) { static StackNode *stack = NULL; + /* Neuer Baum → Stack initialisieren */ if (root != NULL) stack = push_left(root, stack); if (stack == NULL) return NULL; + /* Top-Element vom Stack holen */ StackNode *sn = pop(&stack); if (sn == NULL) return NULL; - TreeNode *node = sn->data; - free(sn); + TreeNode *node = (TreeNode *)sn->data; + free(sn); // WICHTIG: pop gibt StackNode zurück → hier freigeben + /* Rechten Teilbaum vorbereiten */ if (node->right != NULL) stack = push_left(node->right, stack); return node->data; } +/* Hilfsfunktion: alle linken Knoten auf den Stack legen */ static StackNode *push_left(TreeNode *node, StackNode *stack) { while (node != NULL) @@ -105,6 +113,7 @@ static StackNode *push_left(TreeNode *node, StackNode *stack) return stack; } +/* Gibt den gesamten Baum frei */ void clearTree(TreeNode *root) { if (root == NULL) @@ -116,6 +125,7 @@ void clearTree(TreeNode *root) free(root); } +/* Liefert die Anzahl der Knoten im Baum */ unsigned int treeSize(const TreeNode *root) { if (root == NULL)