Funktionen des Binaerbaums implementiert

This commit is contained in:
silvana884 2025-12-04 11:40:26 +01:00
parent be5c1754f9
commit 5859268475

View File

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