diff --git a/bintree.c b/bintree.c index 02be37d..c62d2d7 100644 --- a/bintree.c +++ b/bintree.c @@ -1,24 +1,20 @@ #include #include #include - #include "stack.h" #include "bintree.h" static StackNode *push_left(TreeNode *node, StackNode *stack); -/* Vergleichsfunktion */ -int compareFct(const void *argument1, const void *argument2) +int compareFct(const void *a, const void *b) { - int x = *((int *)argument1); - int y = *((int *)argument2); - + int x = *((int *)a); + int y = *((int *)b); if (x < y) return -1; if (x > y) return 1; return 0; } -/* Erzeugt einen neuen Baumknoten mit Datenkopie */ static TreeNode *create_node(const void *data, size_t data_size) { TreeNode *node = malloc(sizeof(TreeNode)); @@ -27,7 +23,6 @@ static TreeNode *create_node(const void *data, size_t data_size) perror("Speicher wurde NICHT reserviert!"); return NULL; } - node->data = malloc(data_size); if (!node->data) { @@ -35,67 +30,48 @@ static TreeNode *create_node(const void *data, size_t data_size) free(node); return NULL; } - memcpy(node->data, data, data_size); node->left = NULL; node->right = NULL; - return node; } -/* Fügt Daten in den Binärbaum ein */ TreeNode *addToTree(TreeNode *root, const void *data, size_t dataSize, CompareFctType compareFct, int *isDuplicate) { if (root == NULL) { - if (isDuplicate) - *isDuplicate = 0; + if (isDuplicate) *isDuplicate = 0; return create_node(data, dataSize); } - int cmp = compareFct(data, root->data); - if (cmp < 0) - { root->left = addToTree(root->left, data, dataSize, compareFct, isDuplicate); - } else if (cmp > 0) - { root->right = addToTree(root->right, data, dataSize, compareFct, isDuplicate); - } - else - { - if (isDuplicate) - *isDuplicate = 1; - } - + else if (isDuplicate) + *isDuplicate = 1; return root; } -/* Inorder-Iterator über den Baum */ -void *nextTreeData(TreeNode *root) +// nextTreeData benutzt jetzt einen extern verwalteten Stack +void *nextTreeData(TreeNode *root, StackNode **stack) { - static StackNode *stack = NULL; - - /* Neuer Start → linken Pfad auf Stack legen */ if (root != NULL) - stack = push_left(root, stack); + *stack = push_left(root, *stack); - if (stack == NULL) + if (*stack == NULL) return NULL; - /* TOP lesen, dann POP */ - TreeNode *node = (TreeNode *)top(stack); - stack = pop(stack); + TreeNode *node = (TreeNode *)top(*stack); + *stack = pop(*stack); if (node->right != NULL) - stack = push_left(node->right, stack); + *stack = push_left(node->right, *stack); return node->data; } -/* Hilfsfunktion: linken Pfad auf Stack legen */ static StackNode *push_left(TreeNode *node, StackNode *stack) { while (node != NULL) @@ -106,23 +82,19 @@ static StackNode *push_left(TreeNode *node, StackNode *stack) return stack; } -/* Gibt gesamten Baum frei */ void clearTree(TreeNode *root) { if (root == NULL) return; - clearTree(root->left); clearTree(root->right); free(root->data); free(root); } -/* Liefert Anzahl der Knoten */ unsigned int treeSize(const TreeNode *root) { if (root == NULL) return 0; - return 1 + treeSize(root->left) + treeSize(root->right); } \ No newline at end of file diff --git a/bintree.o b/bintree.o new file mode 100644 index 0000000..d74077c Binary files /dev/null and b/bintree.o differ diff --git a/highscore.o b/highscore.o new file mode 100644 index 0000000..7537478 Binary files /dev/null and b/highscore.o differ diff --git a/main.o b/main.o new file mode 100644 index 0000000..54b50bf Binary files /dev/null and b/main.o differ diff --git a/numbers.o b/numbers.o new file mode 100644 index 0000000..14309dc Binary files /dev/null and b/numbers.o differ diff --git a/stack.o b/stack.o new file mode 100644 index 0000000..0120f3b Binary files /dev/null and b/stack.o differ diff --git a/timer.o b/timer.o new file mode 100644 index 0000000..77c43a1 Binary files /dev/null and b/timer.o differ