From a118f4e92003a93a7323fd26edb19edd7ef6182e Mon Sep 17 00:00:00 2001 From: Maximilian Ott Date: Tue, 16 Dec 2025 11:50:59 +0100 Subject: [PATCH] binetree completely finisehd --- bintree.c | 56 ++++++++++++++++++++++++++++++++++++++++-------------- bintree.o | Bin 2848 -> 0 bytes stack.o | Bin 1768 -> 1840 bytes 3 files changed, 42 insertions(+), 14 deletions(-) delete mode 100644 bintree.o diff --git a/bintree.c b/bintree.c index c62d2d7..02be37d 100644 --- a/bintree.c +++ b/bintree.c @@ -1,20 +1,24 @@ #include #include #include + #include "stack.h" #include "bintree.h" static StackNode *push_left(TreeNode *node, StackNode *stack); -int compareFct(const void *a, const void *b) +/* Vergleichsfunktion */ +int compareFct(const void *argument1, const void *argument2) { - int x = *((int *)a); - int y = *((int *)b); + int x = *((int *)argument1); + int y = *((int *)argument2); + if (x < y) return -1; if (x > y) return 1; return 0; } +/* Erzeugt einen neuen Baumknoten mit Datenkopie */ static TreeNode *create_node(const void *data, size_t data_size) { TreeNode *node = malloc(sizeof(TreeNode)); @@ -23,6 +27,7 @@ static TreeNode *create_node(const void *data, size_t data_size) perror("Speicher wurde NICHT reserviert!"); return NULL; } + node->data = malloc(data_size); if (!node->data) { @@ -30,48 +35,67 @@ static TreeNode *create_node(const void *data, size_t data_size) free(node); return NULL; } + memcpy(node->data, data, data_size); node->left = NULL; node->right = NULL; + return node; } +/* Fügt Daten in den Binärbaum ein */ TreeNode *addToTree(TreeNode *root, const void *data, size_t dataSize, CompareFctType compareFct, int *isDuplicate) { if (root == NULL) { - if (isDuplicate) *isDuplicate = 0; + if (isDuplicate) + *isDuplicate = 0; return create_node(data, dataSize); } + int cmp = compareFct(data, root->data); + if (cmp < 0) + { root->left = addToTree(root->left, data, dataSize, compareFct, isDuplicate); + } else if (cmp > 0) + { root->right = addToTree(root->right, data, dataSize, compareFct, isDuplicate); - else if (isDuplicate) - *isDuplicate = 1; + } + else + { + if (isDuplicate) + *isDuplicate = 1; + } + return root; } -// nextTreeData benutzt jetzt einen extern verwalteten Stack -void *nextTreeData(TreeNode *root, StackNode **stack) +/* Inorder-Iterator über den Baum */ +void *nextTreeData(TreeNode *root) { - if (root != NULL) - *stack = push_left(root, *stack); + static StackNode *stack = NULL; - if (*stack == NULL) + /* Neuer Start → linken Pfad auf Stack legen */ + if (root != NULL) + stack = push_left(root, stack); + + if (stack == NULL) return NULL; - TreeNode *node = (TreeNode *)top(*stack); - *stack = pop(*stack); + /* TOP lesen, dann POP */ + TreeNode *node = (TreeNode *)top(stack); + stack = pop(stack); if (node->right != NULL) - *stack = push_left(node->right, *stack); + stack = push_left(node->right, stack); return node->data; } +/* Hilfsfunktion: linken Pfad auf Stack legen */ static StackNode *push_left(TreeNode *node, StackNode *stack) { while (node != NULL) @@ -82,19 +106,23 @@ static StackNode *push_left(TreeNode *node, StackNode *stack) return stack; } +/* Gibt gesamten Baum frei */ void clearTree(TreeNode *root) { if (root == NULL) return; + clearTree(root->left); clearTree(root->right); free(root->data); free(root); } +/* Liefert Anzahl der Knoten */ unsigned int treeSize(const TreeNode *root) { if (root == NULL) return 0; + return 1 + treeSize(root->left) + treeSize(root->right); } \ No newline at end of file diff --git a/bintree.o b/bintree.o deleted file mode 100644 index d74077cf7a28c9c0e155243c42e50ec38c716980..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2848 zcmb7GU1%d!6uznZ6Sdn6sGuS?ii$ssuHr*sSBU7WQ|OlJwo*i$#^lC?O_MO4xN#v; zNVn`Tbj^dl`LI3+>x=jx?2Fkw9S439V#=pn3&WH^AX98rd+DF&ovUb_!i>NPE zTrMS3o>MNI%N5d&GxK`Sh|L_=6@mo0f_#M8+}*%SIqpm8I5O*G+~l%U#=-jL4lDg4 zV_N}Oluy&WLS*%x_)Az1Vk!3tA;w~)7IY}->!^b?tM>?T865Fq4vUCv}7Tgq~J#|~cHYx>sBTJ@%gZJ5dmZ6%60#Nw;~XCY&I1-0A$CiQ6hcC_<0 zoWrn7ePPB>*vWliM(1HVW3bq;e;7oE9_k3I3*NPBKPLc1=K0v<8rd`+agE21bjiBG z7BaVh2)&&4#w+W%TxDulT?+1eLI$A10n`o9M6+PEDMUW5B4>J$L6zatDNckb;2%t( zSzxu$wi}ytvnna2Y9ylYqDE*RzNYG=UQ_Xb`!&!{7c+!>@ZswVuXim(EWm`3B{<$! zIs&2q$Uv?^eD36{Rl69Bu&*#lxyu=Fk733{)TYt+l`e`dS0x;YcW5Sj-7HyqPM=GwK0Z*8j% zaM%w}`I~{Y9l7pXyLgXP*=I^Jm&!^vezsUBcrspq7za=6SBVvpnjn?7y1oV$!)o%k~5aT1ns}sih*lWl1&lvgPvnj5#ALBIA zFAu+O|5o`JuaSPA!EZ7Ac<=2oZX^A^hupc#iaY z8GbhVF|I>?SAjcz3e9hr&wwM$oCL>!n=x?wdYa$ie(`pjE;!l8!SOLOw;)jbAK>^6 zHGcz#>4B@@_|-ALWc?ScUuXSS=oMtP@PO*bHRhL@uQFd^o?sql4i?5;1fM_xJ>O5V ztmm}~IR^U@IFXA*vYyA|ER&7sJ}k29_W|2b*7N-V%X(gCA(M|Lnw@_6^8xwffIK}Q zzdIn)%=YIKj^|1_?MXN372R3-kGM}WUC2RGDz9Xnyv$%5{!Me`sT8TD>lR%E6iX23 z;W*23IaT`DNoCKfFqQ61?z|NEKPK@^>H54Xv5dcLT(DOV;v=@g1-xGX30`C#j2&h_-i(xW13txRoVo{nx zRcWq5L4H92$PlpVoK&E}#i^MfWiU&<6Z7&E%JTCRfWoP{3Lqsg>!7+)5{nh`lTwR{ zfwsElq~@mPl>n6$gDnI55lECn7|?{kFu9(^kTG)dMizO-lF1iY%$aWdnasti#%M6v jkX4pE_04el1 z?)n2nPrlFOz$h?z1CvbscOVx{_9Zt+X}9YKk8TE!PS+nm<`0kNBLcC9)4)KFU%mxo z3PY$z=Tnd7Hwqq|wGc&}Kt0X19~k&sY~V&XZ~)DC0XDAL0w}`+m$3l4$q8gr?FWeK zx`FC|M!ekl|NnoWg$l8U-BL4hQi~K7f(ueJlQU9_6teU4@=8(_@_@V&g`(8r)S|M< zIxI4NnZ+dvIjN~dIttl|d3jLzg8YJl)I3El2DmXLiOJatNNQ6v^Atkz3v^v`Qgc)D zN`OkiVDfqvPsYH>KUw4%6DLcunsX}r1v&``$|pCnO0&8E6;({GWL4)p02L1eiSteY UivNI$Bmzam8E0*N$?DDs03F(