From 144648886f369c8e96d4e21cba8b696611be8cbc Mon Sep 17 00:00:00 2001 From: Hofmann Jonas Date: Tue, 9 Dec 2025 11:19:56 +0100 Subject: [PATCH] addToTree corrected --- bintree.c | 14 +++++++------- bintree.o | Bin 2535 -> 2389 bytes bintreeTests.c | 12 ++++++------ runbintreeTests.exe | Bin 102366 -> 102366 bytes 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/bintree.c b/bintree.c index c55d660..71ed18a 100644 --- a/bintree.c +++ b/bintree.c @@ -21,7 +21,7 @@ unsigned int treeSize (const TreeNode *root); // self declared functions - TreeNode *addToTreeRec (TreeNode *currentNode, TreeNode *newNode, CompareFctType compareFct, int *isDuplicate); + TreeNode *addToTreeRec (TreeNode *currentNode, TreeNode *newNode, CompareFctType compareFct, int *isDuplicate, const int root); void clearTreeRec (TreeNode *currentNode); void clearNode (TreeNode *node); void treeSizeRec (const TreeNode *currentNode, unsigned int *nodeCount); @@ -44,16 +44,16 @@ TreeNode *addToTree(TreeNode *root, const void *data, size_t dataSize, CompareFc memcpy(newNode->data, data, dataSize); - return addToTreeRec(root, newNode, compareFct, isDuplicate); + return addToTreeRec(root, newNode, compareFct, isDuplicate, 1); } -TreeNode *addToTreeRec(TreeNode *currentNode, TreeNode *newNode, CompareFctType compareFct, int *isDuplicate) +TreeNode *addToTreeRec(TreeNode *currentNode, TreeNode *newNode, CompareFctType compareFct, int *isDuplicate, const int root) { if ((currentNode == NULL)) { // printf("Node == NULL\n"); - if (isDuplicate == NULL) + if ((isDuplicate == NULL) || root) { return newNode; } @@ -65,19 +65,19 @@ TreeNode *addToTreeRec(TreeNode *currentNode, TreeNode *newNode, CompareFctType else if ((compareFct(currentNode->data, newNode->data) < 0)) { // printf("<0\n"); - currentNode->left = addToTreeRec(currentNode->left, newNode, compareFct, isDuplicate); + currentNode->left = addToTreeRec(currentNode->left, newNode, compareFct, isDuplicate, 0); } else if ((compareFct(currentNode->data, newNode->data) > 0)) { // printf(">0\n"); - currentNode->right = addToTreeRec(currentNode->right, newNode, compareFct, isDuplicate); + currentNode->right = addToTreeRec(currentNode->right, newNode, compareFct, isDuplicate, 0); } else if ((compareFct(currentNode->data, newNode->data) == 0)) { // printf("==0\n"); if (isDuplicate == NULL) { - currentNode->left = addToTreeRec(currentNode->left, newNode, compareFct, isDuplicate); + currentNode->left = addToTreeRec(currentNode->left, newNode, compareFct, isDuplicate, 0); } else { diff --git a/bintree.o b/bintree.o index 707274c8e5ecaee5bdf934b681041b4a312b3296..c1bf070f65fb88afd4622174be48130879dd9f6a 100644 GIT binary patch delta 698 zcmaDZd{u}yrH!2d1kSNBFvv~h6&DO(W?;}^WMG)V3KnNzpJYV3M+|GzalL zx*a%tx?MFqx_uQqxF@S*q%nq77 zkHxQk3CQt40HQwty~+cne*@VPKsJb$Vq#!W0J1@J0ubu}*&zB15L*D*Ao>Roy8ziB z+6x$AKwB8{@>5b3Y!y^XxquuXaCdgLQqZWdFpD=c(Jja?&aBX#+|3%TTn^MD1C(cB zSPEo`fmv&TELkvXCrEa4BwIKm*s+X2rvOEOKn;jNPDY3r14Td%Mu^w~ML^C*hdDDyFy+{SY;*TOoPbz}{fFL$_>e)m3on74(tPf`Ao6k(X`*!B*@Q+fl^&n4t znn(x2;^@$&3{h1OZRR3QgW=Q_@i2Tksc&V8=JoJnIcK9J!|h426mFN)XJM+ESR7~s z8>fOz8EkCnsH<{zWXcWdmK!uG^8Q_e+7-DHnQ{x8gI1{BCp&esJAqe17~OH9E^1@W z?HM!|x#>?cin4Q};CAX2*=bm^GiRo6yxQyaKnxko7P@cMyjGq*4g=#~17mlC;ncwR zxuBkF`;WRXDE(~^UAM}&{QpH>s9#!HSZZJ9r5IITGSAeztf?MlRzFyFSh-gsJ<#Z-T|hwp~(OM diff --git a/bintreeTests.c b/bintreeTests.c index 8e33e98..40fdc05 100644 --- a/bintreeTests.c +++ b/bintreeTests.c @@ -116,15 +116,15 @@ void test_clearTreeworksLikeExpected(void) printf("Tree Filled\n"); // Save all Adresses - void *node1 = testRoot->left; - /* + TreeNode *node1 = testRoot->left; + TreeNode *node2 = testRoot->left->left; TreeNode *node3 = testRoot->left->right; TreeNode *node4 = testRoot->right; TreeNode *node5 = testRoot->right->left; TreeNode *node6 = testRoot->right->right; TreeNode *node7 = testRoot->left->left->left; - */ + printf("Adresses Saved\n"); clearTree(testRoot); @@ -132,7 +132,7 @@ void test_clearTreeworksLikeExpected(void) // Check if everything has been set to NULL TEST_ASSERT_NULL(testRoot->data); - //TEST_ASSERT_NULL(testRoot); + TEST_ASSERT_NULL(testRoot); //TEST_ASSERT_NULL(node1->data); // TEST_ASSERT_NULL(node1); @@ -199,9 +199,9 @@ int main() UNITY_BEGIN(); printf("\n============================\nBinary Tree tests\n============================\n"); - RUN_TEST(test_addToTreeExpandsTreeCorrectly); + // RUN_TEST(test_addToTreeExpandsTreeCorrectly); // RUN_TEST(test_nextTreeDataReturnsNextDataCorrectly); - // RUN_TEST(test_clearTreeworksLikeExpected); + RUN_TEST(test_clearTreeworksLikeExpected); // RUN_TEST(test_treeSizeWorkingLikeExpected); return UNITY_END(); diff --git a/runbintreeTests.exe b/runbintreeTests.exe index 1e05d197464c837c505071d9e934f58cab853339..a66c8f71ea137301dd21344ce475b654de298c29 100644 GIT binary patch delta 17654 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 P{)tc5>uHP0p3wgT`3iW~ delta 17071 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 B;?n>C