From 3837685b210b1c5539a19e7253080e90dd31132c Mon Sep 17 00:00:00 2001 From: muellermo100295 Date: Thu, 11 Dec 2025 14:58:41 +0100 Subject: [PATCH] Update MM --- bintree.c | 9 +++++++-- test_bintree.c | 13 ++++++++----- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/bintree.c b/bintree.c index 91f0430..713c938 100644 --- a/bintree.c +++ b/bintree.c @@ -93,6 +93,11 @@ TreeNode *addToTree(TreeNode *wurzel, return wurzel; } +/* +Die Funktion gibt bei jedem Aufruf das nächste Element des Binärbaums in **Inorder-Reihenfolge** +zurück und merkt sich intern, wo sie zuletzt war. +*/ + void *nextTreeData(TreeNode *wurzel) { static StackNode *iteratorStack = NULL; // interner Zustand über Aufrufe hinweg @@ -110,8 +115,8 @@ void *nextTreeData(TreeNode *wurzel) return NULL; // Nächsten Knoten holen (oberstes Stack-Element) - TreeNode *aktuellerKnoten = (TreeNode *)top(iteratorStack); - iteratorStack = pop(iteratorStack); + TreeNode *aktuellerKnoten = (TreeNode *)top(iteratorStack); //Oberstes Element zurück + iteratorStack = pop(iteratorStack); // entfernt Oberstes Element // Falls rechter Teilbaum existiert: dessen linke Kette ablegen if (aktuellerKnoten->right != NULL) diff --git a/test_bintree.c b/test_bintree.c index fbcc0d6..0407843 100644 --- a/test_bintree.c +++ b/test_bintree.c @@ -3,7 +3,7 @@ #include #include "bintree.h" -// comparator for unsigned int values stored by value in heap +// Vergleichsfunktion für unsigned int static int cmp_uint_ptr(const void *a, const void *b) { unsigned int va = *(const unsigned int *)a; @@ -19,7 +19,7 @@ int main(void) unsigned int vals[] = {5, 2, 8, 1, 3, 7, 9}; const size_t n = sizeof(vals)/sizeof(vals[0]); - // insert values (copy made by addToTree) + // Werte in den Baum einfügen for(size_t i = 0; i < n; i++) { int isDup = 0; @@ -27,22 +27,25 @@ int main(void) if(root == NULL && isDup == 0) { fprintf(stderr, "addToTree allocation failed\n"); return 1; } } + // Baumgröße prüfen unsigned int sz = treeSize(root); if(sz != n) { fprintf(stderr, "treeSize expected %zu got %u\n", n, sz); clearTree(root); return 2; } - // inorder traversal using nextTreeData + // Inorder-Traversierung (muss sortiert sein) unsigned int last = 0; int first = 1; unsigned int *data = nextTreeData(root); while(data != NULL) { unsigned int v = *data; + // Prüfen, ob Reihenfolge korrekt ist if(!first && v < last) { fprintf(stderr, "inorder traversal not sorted: %u after %u\n", v, last); clearTree(root); return 3; } last = v; first = 0; - data = nextTreeData(NULL); + data = nextTreeData(NULL); // nächstes Element holen } - clearTree(root); + clearTree(root); // Speicher freigeben printf("test_bintree: OK\n"); return 0; } +