#include<stdio.h>
#include<stdlib.h>

#ifndef _Tree_H

typedef struct searchTreeNode *tree;
typedef *searchTree *position;

struct serachTreeNode


{
ElementType element;
ptr left;
ptr right;
};
tree MakeEmpty(tree);
position Find(ElementType,tree);
position FindMin(tree);
position FindMax(tree);
tree Insert(ElementType,tree);
ElementType Retrieve(position);
tree Delete(ElementType,tree);

#endif

tree MakeEmpty(tree t)


{
if(t!=NULL)

{
MakeEmpty(t->left);
MakeEmpty(t->right);
free(t);
}
return NULL;
}

tree Find(ElementType x,tree t)


{
if(t!=NULL)

{
if(compare(x,p->element)==-1)
return Find(x,t->left);
else
if(compare(x,p->element)==1)
return Find(x,t->right);
else
return t;
}
else
return NULL;
}

tree FindMin(tree t)


{
if(t!=NULL)

{
while(t->left!=NULL)
t=t->left;
return t;
}
else
return NULL;
}

tree FindMax(tree t)


{
if(t!=NULL)

{
if(t->left!=NULL)
return FindMax(t->right);
}
else
return NULL;
}

tree Insert(Element x,tree t)


{
if(t==NULL)

{
tree tmp=(tree)malloc(sizeof(struct searchTree));
tmp->element=x;
tmp->left=tmp->right=NUll;
}
else

{
if(compare(x,t)==-1)
t->left=Insert(x,t->left);
if(compare(x,t)==1)
t->right=Insert(x,t->right);
}
return t;
}

ElementType Retrieve(position p)


{
return p->Element;
}
