diff --git a/bintree.c b/bintree.c index 1b8aa4c..6eece17 100644 --- a/bintree.c +++ b/bintree.c @@ -66,12 +66,36 @@ 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) { - if(root == 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; + } } - stackNode.top(root); + + // Wenn Stack leer -> fertig + if(stack == NULL) + return NULL; + + // Obersten 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; + } // Releases all memory resources (including data copies). diff --git a/doble_initial.exe b/doble_initial.exe index 1162fb9..71ee97f 100644 Binary files a/doble_initial.exe and b/doble_initial.exe differ diff --git a/highscores.txt b/highscores.txt index 0edaa84..67b8a3c 100644 --- a/highscores.txt +++ b/highscores.txt @@ -1,2 +1,3 @@ Silvana;9944 +hannes;9910 player1;3999