From 353c4cfe6f38ec4d5e19b159cffe6ed597a4caec Mon Sep 17 00:00:00 2001 From: Maximilian Ott Date: Tue, 16 Dec 2025 09:15:17 +0100 Subject: [PATCH] changes bintree.c finished --- bintree.c | 37 +++++++++++++++---------------------- 1 file changed, 15 insertions(+), 22 deletions(-) diff --git a/bintree.c b/bintree.c index ebd01f2..02be37d 100644 --- a/bintree.c +++ b/bintree.c @@ -13,14 +13,12 @@ int compareFct(const void *argument1, const void *argument2) int x = *((int *)argument1); int y = *((int *)argument2); - if (x < y) - return -1; - if (x > y) - return 1; + if (x < y) return -1; + if (x > y) return 1; return 0; } -/* Erzeugt einen neuen Baumknoten mit Kopie der Daten */ +/* Erzeugt einen neuen Baumknoten mit Datenkopie */ static TreeNode *create_node(const void *data, size_t data_size) { TreeNode *node = malloc(sizeof(TreeNode)); @@ -45,7 +43,7 @@ static TreeNode *create_node(const void *data, size_t data_size) return node; } -/* Fügt ein Element in den Baum ein */ +/* Fügt Daten in den Binärbaum ein */ TreeNode *addToTree(TreeNode *root, const void *data, size_t dataSize, CompareFctType compareFct, int *isDuplicate) { @@ -56,13 +54,13 @@ TreeNode *addToTree(TreeNode *root, const void *data, size_t dataSize, return create_node(data, dataSize); } - int cmpFct = compareFct(data, root->data); + int cmp = compareFct(data, root->data); - if (cmpFct < 0) + if (cmp < 0) { root->left = addToTree(root->left, data, dataSize, compareFct, isDuplicate); } - else if (cmpFct > 0) + else if (cmp > 0) { root->right = addToTree(root->right, data, dataSize, compareFct, isDuplicate); } @@ -75,34 +73,29 @@ TreeNode *addToTree(TreeNode *root, const void *data, size_t dataSize, return root; } -/* Iterator über den Baum (Inorder-Traversierung) */ +/* Inorder-Iterator über den Baum */ void *nextTreeData(TreeNode *root) { static StackNode *stack = NULL; - /* Neuer Baum → Stack initialisieren */ + /* Neuer Start → linken Pfad auf Stack legen */ 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; + /* TOP lesen, dann POP */ + TreeNode *node = (TreeNode *)top(stack); + stack = pop(stack); - 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 */ +/* Hilfsfunktion: linken Pfad auf Stack legen */ static StackNode *push_left(TreeNode *node, StackNode *stack) { while (node != NULL) @@ -113,7 +106,7 @@ static StackNode *push_left(TreeNode *node, StackNode *stack) return stack; } -/* Gibt den gesamten Baum frei */ +/* Gibt gesamten Baum frei */ void clearTree(TreeNode *root) { if (root == NULL) @@ -125,7 +118,7 @@ void clearTree(TreeNode *root) free(root); } -/* Liefert die Anzahl der Knoten im Baum */ +/* Liefert Anzahl der Knoten */ unsigned int treeSize(const TreeNode *root) { if (root == NULL)