From 07796c1390f61e2a4bfa640487b700c212d10c3e Mon Sep 17 00:00:00 2001 From: Hofmann Jonas Date: Fri, 12 Dec 2025 06:50:50 +0100 Subject: [PATCH] changed addToTreeRec so it now sets inDuplicate to 0 if needed --- bintree.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 48 insertions(+), 2 deletions(-) diff --git a/bintree.c b/bintree.c index c54d5a2..4ff65ad 100644 --- a/bintree.c +++ b/bintree.c @@ -48,7 +48,7 @@ TreeNode *addToTree(TreeNode *root, const void *data, size_t dataSize, CompareFc return addToTreeRec(root, newNode, compareFct, isDuplicate, 1); } - +/* TreeNode *addToTreeRec(TreeNode *currentNode, TreeNode *newNode, CompareFctType compareFct, int *isDuplicate, const int root) { /*if ((currentNode == NULL)) @@ -62,7 +62,7 @@ TreeNode *addToTreeRec(TreeNode *currentNode, TreeNode *newNode, CompareFctType return currentNode; } } - */ + // Mögliche Ergänzung -------------------------- @@ -96,6 +96,52 @@ if (currentNode == NULL) } + return currentNode; +} */ + +TreeNode *addToTreeRec(TreeNode *currentNode, TreeNode *newNode, CompareFctType compareFct, int *isDuplicate, const int root) +{ + if ((currentNode == NULL)) + { + if ((isDuplicate == NULL) || root) + { + if (isDuplicate != NULL) + { + *isDuplicate = 0; + } + + return newNode; + } + else + { + *isDuplicate = 0; + return currentNode; + } + } + else if ((compareFct(currentNode->data, newNode->data) < 0)) + { + currentNode->left = addToTreeRec(currentNode->left, newNode, compareFct, isDuplicate, 0); + } + else if ((compareFct(currentNode->data, newNode->data) > 0)) + { + currentNode->right = addToTreeRec(currentNode->right, newNode, compareFct, isDuplicate, 0); + } + else if ((compareFct(currentNode->data, newNode->data) == 0)) + { + if (isDuplicate == NULL) + { + currentNode->left = addToTreeRec(currentNode->left, newNode, compareFct, isDuplicate, 0); + } + else + { + *isDuplicate = 1; + } + } + + if (isDuplicate != NULL) + { + *isDuplicate = 0; + } return currentNode; }