From 58592684751445ea71dff68ca9569212fdcc5f05 Mon Sep 17 00:00:00 2001 From: silvana884 Date: Thu, 4 Dec 2025 11:40:26 +0100 Subject: [PATCH] Funktionen des Binaerbaums implementiert --- bintree.c | 52 ++++++++++++++++++++++++++++------------------------ 1 file changed, 28 insertions(+), 24 deletions(-) diff --git a/bintree.c b/bintree.c index 6eece17..139116d 100644 --- a/bintree.c +++ b/bintree.c @@ -66,38 +66,42 @@ 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) { - static StackNode *stack = NULL; + static StackNode *stack = NULL; - // Beim ersten Aufruf: ganzen linken Pfad pushen - if(root != NULL) - { - while(root != NULL) - { - stack = push(stack, root); // TreeNode auf den Stack - root = root->left; - } + // 1) Falls neuer Baum übergeben wurde → Initialisieren + if (root != NULL) + { + // alten Stack leeren + while (stack != NULL) + stack = pop(stack); + + // alle linken Knoten pushen + while (root != NULL) { + stack = push(stack, root); + root = root->left; } + } - // Wenn Stack leer -> fertig - if(stack == NULL) - return NULL; + // 2) Wenn Stack leer → fertig + if (stack == NULL) + return NULL; - // Obersten Knoten holen - TreeNode *node = (TreeNode*) top(stack); - stack = pop(stack); + // 3) Top-Knoten holen + TreeNode *node = (TreeNode *)top(stack); + stack = pop(stack); - // Rechten Teilbaum absteigen - TreeNode *right = node->right; - while(right != NULL) - { - stack = push(stack, right); - right = right->left; - } - - return node->data; + // 4) Wenn rechter Teilbaum existiert → alle linken Knoten pushen + TreeNode *right = node->right; + while (right != NULL) { + stack = push(stack, right); + right = right->left; + } + // 5) Daten zurückgeben + return node->data; } + // Releases all memory resources (including data copies). void clearTree(TreeNode *root) {