#include <stdio.h> 
struct knoten { 
	 struct knoten *links; 
	 struct knoten *rechts; 
	 int wert; 
	 }; 

struct knoten *new_knoten(int wert) 
	 { 
	 struct knoten *hilf; 
	 hilf = (struct knoten *) calloc(1,sizeof(struct knoten)); 
	 if (hilf == NULL) 
		 return hilf; 
	 hilf -> links = NULL; 
	 hilf -> rechts = NULL; 
	 hilf -> wert = wert; 
	 return hilf; 
	 } 

insert_baum_000000(struct knoten **wurzel, int wert) 
	 { 
	 if (*wurzel == NULL) 
		 /* der baum ist noch leer */ 
		 { 
		 *wurzel = new_knoten(wert); 
		 if (*wurzel == NULL) 
			 return 1; 
		 return 0; 
		 } 
	 /* ist noch einzufuegen */ 

	 if ((*wurzel) ->wert == wert) return 2; // schon da;
	 if ((*wurzel) ->wert > wert) return  insert_baum_000000(&  ((*wurzel) ->links), wert);
	 if ((*wurzel) ->wert < wert) return  insert_baum_000000(&  ((*wurzel) ->rechts), wert);
	 } 

print_baum_000000(struct knoten *wurzel) 
	 { 
	 if (wurzel != NULL) 
		 { 
		  print_baum_000000(wurzel->links);
		 printf(" %d \n",wurzel->wert); 
		  print_baum_000000(wurzel->rechts);
		 } 
	 } 

free_baum_000000(struct knoten *wurzel)
	 {  
	 if (wurzel != NULL)
		 { 
		  free_baum_000000(wurzel->links);
		  free_baum_000000(wurzel->rechts);
		  free(wurzel);
		 }
	 }


main() 
{ 
	 struct knoten *wurzel = NULL; 
	int i;

/*
	 if (insert_baum_000000(&wurzel,12)) 
		 printf("irgendwas ist schief gelaufen\n"); 
	 else 
		 print_baum_000000(wurzel); 
*/
	for (i=0;i<1000;i++)
		insert_baum_000000(&wurzel,rand()%1000);


	 print_baum_000000(wurzel);
	 free_baum_000000(wurzel);

}