From e0b80e8068220679a68059e121705d38b3326103 Mon Sep 17 00:00:00 2001 From: "AD005\\z0056b1d" Date: Thu, 11 Dec 2025 11:19:02 +0100 Subject: [PATCH] add to tree wip --- bintree.c | 43 ++++++++++++++++++++++++++++++++++++------- 1 file changed, 36 insertions(+), 7 deletions(-) diff --git a/bintree.c b/bintree.c index 5cf82a9..0753bd7 100644 --- a/bintree.c +++ b/bintree.c @@ -2,17 +2,49 @@ #include "stack.h" #include "bintree.h" -//TODO: binären Suchbaum implementieren +// TODO: binären Suchbaum implementieren /* * `addToTree`: fügt ein neues Element in den Baum ein (rekursiv), - * `clearTree`: gibt den gesamten Baum frei (rekursiv), - * `treeSize`: zählt die Knoten im Baum (rekursiv), - * `nextTreeData`: Traversierung mit Hilfe des zuvor implementierten Stacks. */ + * `clearTree`: gibt den gesamten Baum frei (rekursiv), + * `treeSize`: zählt die Knoten im Baum (rekursiv), + * `nextTreeData`: Traversierung mit Hilfe des zuvor implementierten Stacks. */ // 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) + { + TreeNode *node = malloc(sizeof(data)); + strcpy(root, data); + node->left = NULL; + node->right = NULL; + if (isDuplicate != NULL) + { + isDuplicate = 0; + } + } + return node; + + int compare = compareFct(data, root->data); + + if (compare < 0) // linker Teilbaum + { + root->left = addToTree(); + } + else if (compare > 0) // rechter Teilbaum + { + root->right = addToTree(); + } + else + { + if (isDuplicate != NULL) + { + isDuplicate = 1; + } + return root; + } + 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. @@ -20,17 +52,14 @@ 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) { - } // Releases all memory resources (including data copies). void clearTree(TreeNode *root) { - } // Returns the number of entries in the tree given by root. unsigned int treeSize(const TreeNode *root) { - } \ No newline at end of file