From 58abc8a774ab8b3e516fc815815c59d16bcb986a Mon Sep 17 00:00:00 2001 From: Maximilian Ott Date: Thu, 11 Dec 2025 16:32:25 +0100 Subject: [PATCH] code_komplett --- bintree.c | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/bintree.c b/bintree.c index cfe8571..2cdb2a1 100644 --- a/bintree.c +++ b/bintree.c @@ -2,12 +2,6 @@ #include "stack.h" #include "bintree.h" -//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. */ - static StackNode *push_left(TreeNode *node, StackNode *stack); int compareFct(const void *argument1, const void *argument2) @@ -60,11 +54,11 @@ TreeNode *addToTree(TreeNode *root, const void *data, size_t dataSize, CompareFc int cmpFCT = compareFCT(data, root->data); if (cmpFCT < 0) { - root->left = addToTree(root->left, data, dataSize, compareFCT, isDuplicate); + root->left = addToTree(root->left, data, dataSize, compareFct, isDuplicate); } else if (cmpFCT > 0) { - root->right = addToTree(root->right, data, dataSize, compareFCT, isDuplicate); + root->right = addToTree(root->right, data, dataSize, compareFct, isDuplicate); } else { @@ -95,14 +89,33 @@ void *nextTreeData(TreeNode *root) return node->data; } + +static StackNode *push_left(TreeNode *node, StackNode *stack) +{ + while (node != NULL) + { + stack = push(stack, node); + node = node->left; + } + return stack; +} // Releases all memory resources (including data copies). void clearTree(TreeNode *root) { - + if (root = NULL) return; + clearTree(root->left); + clearTree(root->right); + free(root->data); + free(root); } // Returns the number of entries in the tree given by root. unsigned int treeSize(const TreeNode *root) { + if (root == NULL) + { + return 0; + } + return 1 + treeSize(root->left) + treeSize(root->right); } \ No newline at end of file