changed addToTreeRec so it now sets inDuplicate to 0 if needed
This commit is contained in:
parent
25da0d20df
commit
07796c1390
50
bintree.c
50
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;
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user