From 7135abe9a6ce9c8864c6c03ec147b7963cb4bd01 Mon Sep 17 00:00:00 2001 From: Maximilian Ott Date: Wed, 10 Dec 2025 17:37:42 +0100 Subject: [PATCH] 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.