From 00df65301830330df594bf4272639837e46b60fa Mon Sep 17 00:00:00 2001 From: Tobias Grampp Date: Thu, 27 Nov 2025 17:03:40 +0100 Subject: [PATCH] added addToTree(), clearTree() and treeSize(), but still need to wright unit tests for them --- bintree.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 48 insertions(+), 3 deletions(-) diff --git a/bintree.c b/bintree.c index 5cf82a9..182c509 100644 --- a/bintree.c +++ b/bintree.c @@ -12,7 +12,36 @@ // 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) + { + root = malloc(sizeof(node)); + *node newNode; + *newNode.data = malloc(dataSize); + strcpy(*newNode.data, data); + *newNode.left = NULL; + *newNode.right = NULL; + if(isDuplicate) + *isDuplicate = 0; + return newNode; + } + if(compareFct(*data, *root->data) > 0) + { + *right = addToTree(right, data, dataSize, compareFct, isDuplicate); + } + else if(compareFct(*data, *root->data) < 0) + { + *left = addToTree(right, data, dataSize, compareFct, isDuplicate); + } + else + { + if(!isDuplicate) + *left = addToTree(right, data, dataSize, compareFct, isDuplicate); + else + { + *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. @@ -26,11 +55,27 @@ void *nextTreeData(TreeNode *root) // Releases all memory resources (including data copies). void clearTree(TreeNode *root) { - + if(left) + clearTree(left); + if(right) + clearTree(right); + free(data); + data = NULL; + free(root); + root = NULL; } // Returns the number of entries in the tree given by root. unsigned int treeSize(const TreeNode *root) { - + if(root) + { + unsigned int tempSize = 0; + if(left) + tempSize += treeSize(left); + if(right) + tempSize += treeSize(right); + return tempSize + 1; + } + return 0; } \ No newline at end of file