diff --git a/tree.c b/tree.c new file mode 100644 index 0000000000000000000000000000000000000000..9f603f1e2b2c92f4cbe75b608f0e1a9428968ef3 --- /dev/null +++ b/tree.c @@ -0,0 +1,44 @@ +#include <stdio.h> +#include <stdlib.h> +#include "tree.h" + +void t_insert (struct tree_node* curr, int* val) { + if (curr == NULL || val == NULL) return; + else while ((curr->left != NULL) || (curr->right != NULL)) { + if (*val == *(curr->val)) return; + else if (*val < *(curr->val)) { + if (curr->left != NULL) curr = curr->left; + else break; + } + else { + if (curr->right != NULL) curr = curr->right; + else break; + } + } + if (curr == NULL) return; + else { + struct tree_node* new = malloc (sizeof(struct tree_node)); + new->left = NULL; + new->right = NULL; + new->val = val; + if (*val < *(curr->val)) curr->left = new; + else curr->right = new; + } +} + +void* t_search (struct tree_node* curr, int* val) { + if (curr == NULL) return NULL; + while (curr != NULL) { + if (*val == *(curr->val)) return curr; + else if (*val < *(curr->val)) curr = curr->left; + else curr = curr->right; + } + return NULL; +} + +void t_print (struct tree_node* curr) { // Inorder-Traversierung + if (curr == NULL) return; + t_print(curr->left); + printf("%d\n", *(curr->val)); + t_print(curr->right); +} \ No newline at end of file