Compare commits

...

3 Commits

Author SHA1 Message Date
4eacd3c79b Merge pull request 'MM_Branch' (#4) from MM_Branch into main
Reviewed-on: #4
2025-12-11 14:05:28 +00:00
muellermo100295
3837685b21 Update MM 2025-12-11 14:58:41 +01:00
9a9f0d6bb1 Merge pull request 'main' (#2) from main into MM_Branch
Reviewed-on: #2
2025-12-11 11:23:14 +00:00
2 changed files with 15 additions and 7 deletions

View File

@ -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)

View File

@ -3,7 +3,7 @@
#include <string.h>
#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;
}