diff --git a/bintree.c b/bintree.c index 60daca8..9aa8baa 100644 --- a/bintree.c +++ b/bintree.c @@ -4,8 +4,8 @@ //TODO: binären Suchbaum implementieren -/* * `addToTree`: fügt ein neues Element in den Baum ein (rekursiv), - * `clearTree`: gibt den gesamten Baum frei (rekursiv), +/* * `addToTree`: fügt ein neues Element in den Baum ein (rekursiv), Done + * `clearTree`: gibt den gesamten Baum frei (rekursiv), Done * `treeSize`: zählt die Knoten im Baum (rekursiv), * `nextTreeData`: Traversierung mit Hilfe des zuvor implementierten Stacks. */ @@ -20,8 +20,9 @@ // self declared functions TreeNode *addToTreeRec (TreeNode *currentNode, TreeNode *newNode, CompareFctType compareFct, int *isDuplicate); - TreeNode *clearTreeRec (TreeNode *currentNode); + void clearTreeRec (TreeNode *currentNode); void clearNode (TreeNode *node); + void treeSizeRec (const TreeNode *currentNode, unsigned int *nodeCount); // Adds a copy of data's pointer destination to the tree using compareFct for ordering. Accepts duplicates @@ -69,7 +70,7 @@ TreeNode *addToTreeRec(TreeNode *currentNode, TreeNode *newNode, CompareFctType } else { - isDuplicate = 1; + *isDuplicate = 1; } } @@ -96,7 +97,7 @@ void clearTree(TreeNode *root) } -TreeNode *clearTreeRec(TreeNode *currentNode) +void clearTreeRec(TreeNode *currentNode) { if (currentNode != NULL) { @@ -122,7 +123,23 @@ void clearNode(TreeNode *node) // Returns the number of entries in the tree given by root. unsigned int treeSize(const TreeNode *root) -{ +{ + unsigned int amountOfNodes = 0; + + treeSizeRec(root, &amountOfNodes); + + + return amountOfNodes; +} + +void treeSizeRec(const TreeNode *currentNode, unsigned int *nodeCount) +{ + if (currentNode != NULL) + { + treeSizeRec(currentNode->left, nodeCount); + *nodeCount++; + treeSizeRec(currentNode->right, nodeCount); + } }