diff --git a/bintree.c b/bintree.c index 02be37d..9d78151 100644 --- a/bintree.c +++ b/bintree.c @@ -1,128 +1,125 @@ -#include -#include -#include +#include +#include +#include -#include "stack.h" -#include "bintree.h" +#include "stack.h" +#include "bintree.h" -static StackNode *push_left(TreeNode *node, StackNode *stack); +static StackNode *push_left(TreeNode *node, StackNode *stack); -/* Vergleichsfunktion */ +// Vergleichsfunktion int compareFct(const void *argument1, const void *argument2) { - int x = *((int *)argument1); - int y = *((int *)argument2); + int x = *((int *)argument1); + int y = *((int *)argument2); - if (x < y) return -1; - if (x > y) return 1; - return 0; + if (x < y) return -1; + if (x > y) return 1; + return 0; } -/* Erzeugt einen neuen Baumknoten mit Datenkopie */ +// Erzeugt einen neuen Baumknoten mit Datenkopie static TreeNode *create_node(const void *data, size_t data_size) { - TreeNode *node = malloc(sizeof(TreeNode)); + TreeNode *node = malloc(sizeof(TreeNode)); // Speicher für neuen Knoten reservieren if (!node) { - perror("Speicher wurde NICHT reserviert!"); - return NULL; + perror("Speicher wurde NICHT reserviert!"); + return NULL; } - node->data = malloc(data_size); + node->data = malloc(data_size); // Speicher für Knotendaten reservieren if (!node->data) { - perror("Speicher wurde NICHT reserviert!"); - free(node); - return NULL; + perror("Speicher wurde NICHT reserviert!"); + free(node); + return NULL; } - memcpy(node->data, data, data_size); - node->left = NULL; - node->right = NULL; + memcpy(node->data, data, data_size); // Daten in neuen Speicher kopieren + node->left = NULL; // Linken Kindzeiger initialisieren + node->right = NULL; // Rechten Kindzeiger initialisieren - return node; + return node; // Zeiger auf neuen Knoten zurückgeben } -/* Fügt Daten in den Binärbaum ein */ -TreeNode *addToTree(TreeNode *root, const void *data, size_t dataSize, - CompareFctType compareFct, int *isDuplicate) +//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 (root == NULL) // Wenn Baum leer ist (Ende erreicht) { if (isDuplicate) - *isDuplicate = 0; - return create_node(data, dataSize); + *isDuplicate = 0; // Kein Duplikat, da neu eingefügt + return create_node(data, dataSize); } - int cmp = compareFct(data, root->data); + int cmp = compareFct(data, root->data); // Daten mit aktuellem Knoten vergleichen - if (cmp < 0) + if (cmp < 0) { - root->left = addToTree(root->left, data, dataSize, compareFct, isDuplicate); + root->left = addToTree(root->left, data, dataSize, compareFct, isDuplicate); } - else if (cmp > 0) + else if (cmp > 0) { root->right = addToTree(root->right, data, dataSize, compareFct, isDuplicate); } - else + else { if (isDuplicate) - *isDuplicate = 1; + *isDuplicate = 1; } - return root; + return root; // Wurzel unverändert zurückgeben } -/* Inorder-Iterator über den Baum */ +// Inorder-Iterator über den Baum void *nextTreeData(TreeNode *root) { - static StackNode *stack = NULL; + static StackNode *stack = NULL; - /* Neuer Start → linken Pfad auf Stack legen */ + /* Linken Pfad auf Stack legen */ if (root != NULL) - stack = push_left(root, stack); + stack = push_left(root, stack); // Linken Pfad ab root auf Stack legen - 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); // Oberstes Element vom Stack holen + stack = pop(stack); - if (node->right != NULL) - stack = push_left(node->right, stack); + if (node->right != NULL) // Wenn rechter Teilbaum existiert + stack = push_left(node->right, stack); // Linken Pfad vom rechten Kind auf Stack legen - return node->data; + return node->data; // Daten des Knotens zurückgeben } -/* Hilfsfunktion: linken Pfad auf Stack legen */ +// Hilfsfunktion: linken Pfad auf Stack legen static StackNode *push_left(TreeNode *node, StackNode *stack) { - while (node != NULL) + while (node != NULL) // Solange linkes Kind existiert { - stack = push(stack, node); - node = node->left; + stack = push(stack, node); // Knoten auf Stack legen + node = node->left; } - return stack; + return stack; } -/* Gibt gesamten Baum frei */ +// Gibt gesamten Baum frei void clearTree(TreeNode *root) { - if (root == NULL) + if (root == NULL) return; - clearTree(root->left); - clearTree(root->right); - free(root->data); - free(root); + clearTree(root->left); + clearTree(root->right); + free(root->data); + free(root); } - -/* Liefert Anzahl der Knoten */ +// Liefert Anzahl der Knoten unsigned int treeSize(const TreeNode *root) { - if (root == NULL) + if (root == NULL) return 0; - return 1 + treeSize(root->left) + treeSize(root->right); + return 1 + treeSize(root->left) + treeSize(root->right); } \ No newline at end of file diff --git a/highscores.txt b/highscores.txt index 223b7c0..9c5f396 100644 --- a/highscores.txt +++ b/highscores.txt @@ -1,5 +1,6 @@ thilo;19753 thilo;14880 +max;14849 thilo;14733 player1;9956 player2;4988 diff --git a/stack.o b/stack.o deleted file mode 100644 index 3f73d64..0000000 Binary files a/stack.o and /dev/null differ