From a3b951d0a9c935953348f0173cf0c5df02d1985d Mon Sep 17 00:00:00 2001 From: Simon May Date: Tue, 2 Dec 2025 14:44:04 +0100 Subject: [PATCH] =?UTF-8?q?aufr=C3=A4umen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bintree.c | 40 +++++++++++++++++++++++++++++----------- numbers.c | 5 +++++ 2 files changed, 34 insertions(+), 11 deletions(-) diff --git a/bintree.c b/bintree.c index 2927e04..fd5f30a 100644 --- a/bintree.c +++ b/bintree.c @@ -2,11 +2,11 @@ #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). @@ -45,18 +45,36 @@ void *nextTreeData(TreeNode *root) // Releases all memory resources (including data copies). void clearTree(TreeNode *root) { - + if (root == NULL) + { + return; + } + + if (root->left != NULL) + { + clearTree(root->left); + free(root->left); + } + else if (root->right != NULL) + { + clearTree(root->right); + free(root->right); + } + root->data = NULL; } // Returns the number of entries in the tree given by root. unsigned int treeSize(const TreeNode *root) { - int counter = 0; - - if(root != NULL) + int counterL, counterR = 0; + if (root->left != NULL) { - treeSize(root->left); - counter++; - treeSize(root->right); + counterL = treeSize(root->left) + 1; } + else if (root->right != NULL) + { + counterR = treeSize(root->right) + 1; + } + + return counterL + counterR; } \ No newline at end of file diff --git a/numbers.c b/numbers.c index cd016a4..41d0980 100644 --- a/numbers.c +++ b/numbers.c @@ -136,6 +136,11 @@ unsigned int getDuplicate(const unsigned int numbers[], unsigned int len) unsigned int temp[len]; unsigned int duplicate = 0; + /*if(numbers == NULL || (sizeof(numbers) / sizeof(typeof(numbers)) != len)) + { + return 0;S + }*/ + for (int i = 0; i < len; i++) { temp[i] = numbers[i];