Funktion addtotree in bintree.c eingefügt
This commit is contained in:
parent
61618e00bf
commit
4e9c4f2496
37
bintree.c
37
bintree.c
@ -10,10 +10,43 @@
|
||||
|
||||
// Adds a copy of data's pointer destination to the tree using compareFct for ordering. Accepts duplicates
|
||||
// if isDuplicate is NULL, otherwise ignores duplicates and sets isDuplicate to 1 (or to 0 if a new entry is added).
|
||||
TreeNode *addToTree(TreeNode *root, const void *data, size_t dataSize, CompareFctType compareFct, int *isDuplicate)
|
||||
{
|
||||
|
||||
// Hilfsfunktion: neuen Knoten erstellen und Daten kopieren
|
||||
TreeNode* newNode(const void* data, size_t dataSize) {
|
||||
TreeNode* node = malloc(sizeof(TreeNode));
|
||||
if (!node) return NULL;
|
||||
|
||||
node->data = malloc(dataSize);
|
||||
if (!node->data) {
|
||||
free(node);
|
||||
return NULL;
|
||||
}
|
||||
memcpy(node->data, data, dataSize); // Daten kopieren
|
||||
node->left = node->right = NULL;
|
||||
return node;
|
||||
}
|
||||
TreeNode *addToTree(TreeNode *root, const void *data, size_t dataSize,
|
||||
CompareFctType compareFct, int *isDuplicate)
|
||||
{
|
||||
if (root == NULL) {
|
||||
*isDuplicate = 0; // kein Duplikat, neuer Knoten
|
||||
return newNode(data, dataSize); // neuer Knoten wird Wurzel
|
||||
}
|
||||
|
||||
int result = compareFct(data, root->data);
|
||||
|
||||
if (result < 0) {
|
||||
root->left = addToTree(root->left, data, dataSize, compareFct, isDuplicate);
|
||||
} else if (result > 0) {
|
||||
root->right = addToTree(root->right, data, dataSize, compareFct, isDuplicate);
|
||||
} else {
|
||||
// result == 0 → Duplikat
|
||||
*isDuplicate = 1;
|
||||
}
|
||||
|
||||
return root;
|
||||
}
|
||||
|
||||
|
||||
// Iterates over the tree given by root. Follows the usage of strtok. If tree is NULL, the next entry of the last tree given is returned in ordering direction.
|
||||
// Use your implementation of a stack to organize the iterator. Push the root node and all left nodes first. On returning the next element,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user