#include<iostream.h>
struct B_S_Tree_node
{
	int data;
	B_S_Tree_node *left;
	B_S_Tree_node *right;
}*t;
void create()
{
	t=NULL;
}
void insert(int element ,B_S_Tree_node *t)
{
	if(t!=NULL) 
	{
		if(t->data==element)
			cout<<"The element is not inserted,There is befor another";
		else
		{ 
			if (t->data<element)
				insert(element,t->right);
			else
				insert(element,t->left);
		}
	}
	else 
	{
		t=new B_S_Tree_node;
		t->data=element;
		t->left=NULL;
		t->right=NULL;
	}
}
//-----------------------------
int find_min(B_S_Tree_node *t)
{
	if(t==NULL)
		cout<<"Tree is empty";
	else
		while(t->left !=NULL)
		{
			t=t->left;
			return t->data;
		}
}

//--------------------------------

B_S_Tree_node *find_element(int data,B_S_Tree_node *t)

{ 
	if(t!=NULL)
	{ 
		if (t->data==data)
			return t;
		else
		{
			if(t->data<data)
				return find_element(data,t->right);
			else
				return find_element(data,t->left);
		}
	}
   return NULL;
}
void remove (int data,B_S_Tree_node *t)
{
	if(t==NULL)
		cout<<"the tree is empty";
	else if(data<t->data)
		remove(data,t->left);
	else if(data>t->data)
		remove(data,t->right);
	else
	{
		if((t->left!=NULL)&&(t->right!=NULL))
		{
			t->data=find_min(t->right);
			remove(data,t->right);
		}
		else
		{
			B_S_Tree_node *temp=t;
			t=(t->left)?t->left:t->right;
			delete temp;
		}

	}      
}
void print_postorder(B_S_Tree_node*t)
{
	if(t!=NULL)
	{
		cout<<"(";
		print_postorder(t->left);
		print_postorder(t->right);
		cout<<t->data;
		cout<<")";
	}
}
void main()
{
	int n,m;
//B_S_Tree_node *y,*r;
    create();
	cin>>n;
    for(int i=1;i<=n;i++)    
	{
		cout<<"enter element";
		cin>>m;
		insert(m,t);
	}
	cout<<"\n minimumm element";
    find_min(t);
    cout<<"enter remove";
    remove(m,t);
    cout<<"the tree is";
    print_postorder(t);
}
