#include <stdio.h>#include<stdlib.h>#defineSIZE 10typedefstructTree {intdata; structTree *Left ; structTree *Right ;} Tree;intFind (Tree *t,intx) {intI=0; if(t==NULL) { return-1; } if(t->data==x) {returni; } Else if(x<t->data) {i++; Find (t-left,x); } Else if(x>t->data) {i++; Find (t-right,x); }}tree*findmin (Tree *t) {if(t==NULL) { returnNULL; } Else if(t->left==NULL) { returnT; } Else { returnFindmin (t->Left ); }}intFindmax (Tree *t) {if(t!=NULL) { while(t->right!=NULL) {T=t->Right ; } } returnT->data;} Tree*init (Tree *t,intx) {if(t==NULL) {T=malloc(sizeof(tree)); T->data=x; T->left=NULL; T->right=NULL; returnT; } Else if(T->left = =NULL) {T->left=init (t->left,x); returnT; } Else{T->right=init (t->right,x); returnT; }}tree*insertsort (Tree *t,intx) {if(t==NULL) {T=malloc(sizeof(tree)); T->data=x; T->left=NULL; T->right=NULL; } Else if(X < t->data) {T->left=insertsort (t->left,x); } Else if(X > T->data) {T->right=insertsort (t->right,x); } returnT;} Tree*delete (Tree *t,intx) {tree*temp; if(t==NULL) {printf ("error,element not found!"); } Else if(x < T->data) {/*Go Left*/T->left=delete (t->left,x); } Else if(x > T->data) {/*Go Right*/T->right=delete (t->right,x); } Else if(T->left && t->right) {/*T->data==x and T has children*/Temp=findmin (t->Right ); T->data=temp->data; T->right=delete (t->right,t->data); } Else{/*One or zero children*/Temp=T; if(t->left==NULL) {T=t->Right ; } Else if(T->right = =NULL) {T=t->Left ; } Free(temp); } returnt;}voidPretravel (Tree *t) {if(t==NULL) { return; } printf ("%d",t->data); Pretravel (t-Left ); Pretravel (t-Right );}voidMidtravel (Tree *t) {if(t==NULL) { return; } midtravel (T-Left ); printf ("%d",t->data); Midtravel (t-Right );}voidPosttravel (Tree *t) {if(t==NULL) { return; } posttravel (T-Left ); Posttravel (t-Right ); printf ("%d",t->data);} Main () {tree*T; inti; for(i=0; i<size; i++) {T=init (t,i); } pretravel (t); printf ("\ n"); Midtravel (t); printf ("\ n"); Posttravel (t);}
C language implementation of commonly used data structures--two fork Tree