From 7135abe9a6ce9c8864c6c03ec147b7963cb4bd01 Mon Sep 17 00:00:00 2001 From: Maximilian Ott Date: Wed, 10 Dec 2025 17:37:42 +0100 Subject: [PATCH 1/2] code_1 --- bintree.c | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/bintree.c b/bintree.c index 5cf82a9..16eca55 100644 --- a/bintree.c +++ b/bintree.c @@ -8,11 +8,72 @@ * `treeSize`: zählt die Knoten im Baum (rekursiv), * `nextTreeData`: Traversierung mit Hilfe des zuvor implementierten Stacks. */ +static StackNode *push_left(TreeNode *node, StackNode *stack); + +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; + return 0; +} + +static TreeNode *create_node(const void *data, size_t data_size) +{ + TreeNode *node = malloc(sizeof(TreeNode)); + if (!node) + { + perror("Speicher wurde NICHT reserviert!\n"); + return NULL; + } + + node->data = malloc(data_size); + if (!node->data) + { + perror("Speicher wurde NICHT reserviert!\n"); + return NULL; + } + + memcpy(node->data, data, data_size); + node->left = NULL; + node ->right = NULL; + + return node; +} + // Adds a copy of data's pointer destination to the tree using compareFct for ordering. Accepts duplicates // if isDuplicate is NULL, otherwise ignores duplicates and sets isDuplicate to 1 (or to 0 if a new entry is added). TreeNode *addToTree(TreeNode *root, const void *data, size_t dataSize, CompareFctType compareFct, int *isDuplicate) { + if (root == NULL) + { + if (isDuplicate) + { + *isDuplicate = 0; + } + return create_node(data, dataSize); + } + int cmpFCT = compareFCT(data, root->data); + if (cmpFCT < 0) + { + root->left = addToTree(root->left, data, dataSize, compareFCT, isDuplicate); + } + else if (cmpFCT > 0) + { + root->right = addToTree(root->right, data, dataSize, compareFCT, isDuplicate); + } + else + { + if (isDuplicate) + *isDuplicate = 1; + } + return root; + + } // Iterates over the tree given by root. Follows the usage of strtok. If tree is NULL, the next entry of the last tree given is returned in ordering direction. From 39e0758dbd25dd9d7406bbe9a1ab4b7a6d3b65bb Mon Sep 17 00:00:00 2001 From: Maximilian Ott Date: Wed, 10 Dec 2025 17:53:26 +0100 Subject: [PATCH 2/2] code_2 --- bintree.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/bintree.c b/bintree.c index 16eca55..cfe8571 100644 --- a/bintree.c +++ b/bintree.c @@ -72,8 +72,6 @@ TreeNode *addToTree(TreeNode *root, const void *data, size_t dataSize, CompareFc *isDuplicate = 1; } return root; - - } // Iterates over the tree given by root. Follows the usage of strtok. If tree is NULL, the next entry of the last tree given is returned in ordering direction. @@ -81,9 +79,22 @@ TreeNode *addToTree(TreeNode *root, const void *data, size_t dataSize, CompareFc // push the top node and push all its left nodes. void *nextTreeData(TreeNode *root) { + static StackNode *stack = NULL; + if (root != NULL) + stack = push_left(root, stack); + + if (stack == NULL) + return NULL; + + TreeNode *node; + node = pop(&stack); + + if (node->right != NULL) + stack = push_left(node->right, stack); + + return node->data; } - // Releases all memory resources (including data copies). void clearTree(TreeNode *root) {