#include "baum.h" //Speicher fuer ein neues Element reservieren //und den Wert setzen struct btree * create_element( int value ) { struct btree *tree = (struct btree *) malloc(sizeof(struct btree)); if( tree == NULL ) { printf("COULD NOT ALLOC MEMORY!\n"); exit(1); } else { tree->value = value; tree->left = NULL; tree->right = NULL; return tree; } } /* * Uebergabe erfolgt durch **root, * da der Zeiger *root veraenderbar sein soll! * => *root = element; * * * Gibt 1 bei erfolg und 0 bei fehler zurueck */ int put ( struct btree **root, struct btree *element ) { //ROOT ELEMENT ONLY! if( *root == NULL) { *root = element; return 1; } if( element->value == (*root)->value ){ /* value ist schon vorhanden */ return 0; } else if( element->value < (*root)->value) { //Falls kein Kind vorhanden hier einfuegen if( (*root)->left == NULL ) { (*root)->left = element; return 1; } //Weiter im linken Ast suchen else { return put( &((*root)->left), element ); } } else{ //Falls kein Kind vorhanden hier einfuegen if( (*root)->right == NULL ) { (*root)->right = element; return 1; } //Weiter im rechten Ast suchen else { return put( &((*root)->right), element ); } } } /* * Ausgabe als horizontaler Baum */ void print(struct btree *tree) { //Variable bleibt ueber die Lebenszeit des Funktionsaufrufes hinaus bestehen static int level = 0; if (tree == NULL) { return; } //Ebene erhoehen level++; //Ausgabe //Je tiefer desto weiter rechts //=> %*d, das * erlaubt eine Variable angabe der Breite der Ausgabe printf("%*d\n", (level*5), tree->value); //Erst rechts, dann links if (tree->right != NULL) { print(tree->right); } if (tree->left != NULL) { print(tree->left); } //Eine Ebene runter level--; }