纸上得来终觉浅,绝知此事要躬行。
#include <iostream>
using namespace std;
struct node
{
int nt,val;
node *r,*l;
};
void insert(int v , node *&t)
{
if(t==NULL)
{
t=new node;
if(t==NULL) cout<<" error "<<endl;
else
{
t->val=v,t->l=t->r=NULL;
}
}
else if(v<t->val) insert(v,t->l);
else if(v>t->val) insert(v,t->r);
}
node *find_min(node *t)
{
if(t==NULL) return NULL;
else if(t->l==NULL) return t;
else return find_min(t->l);
}
node *find_max(node *t)
{
if(t==NULL) return NULL;
else if(t->r==NULL) return t;
else return find_max(t->r);
}
void search(node *t)
{
if(t!=NULL)
{
cout<<t->val<<endl;
search(t->l);
search(t->r);
}
}
void delete_node(int v , node *&t)
{
if(t==NULL) puts("error");
else if(v<t->val) delete_node(v , t->l);
else if(v>t->val) delete_node(v , t->r);
else
{
int te;
node *p;
if(t->l && t->r)
{
p=find_min(t->r);
te=t->val;
t->val=p->val;
p->val=te;
delete_node(v,t->r);
}
else
{
p=t;
if(t->l) t=t->l;
else if(t->r) t=t->r;
else t=NULL;
delete p;
}
}
}
int main ()
{
freopen("1.txt","r",stdin);
node *R=new node;
R->r=R->l=NULL;
int v;
node *p=R;
for(int i=0 ;i<5 ; p=R , i++)
{
cin>>v;
if(i==0) R->val=v;
else insert(v , p);
}
//
p=R;
p=find_min(p);
cout<<"The min value:"<<p->val<<endl;
p=R;
p=find_max(p);
cout<<"The max value:"<<p->val<<endl;
p=R;
cout<<"树的遍历:";
search(p);
cout<<endl;
p=R;
delete_node(7,p);
p=R;
cout<<"树的遍历:";
search(p);
cout<<endl;
p=R;
delete_node(45,p);
p=R;
cout<<"树的遍历:";
search(p);
cout<<endl;
return 0;
}