changed addToTreeRec so it now sets inDuplicate to 0 if needed

This commit is contained in:
Jonas Hofmann 2025-12-12 06:50:50 +01:00
parent 25da0d20df
commit 07796c1390

View File

@ -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;
}