عزتي في حجابي
05-15-2006, 12:09 PM
السلام عليكم ورحمة الله وبركاته
عندي برنااااامج عن الاشجار (tree)
وكتبت البرنامج وتنفذ معي
لكن دلة remove ماتحذف الا الجذور اما الاب ماتحذفه
هو ضابظ معي بس ابي احد يساعدني على تعديل بسيط بدالة الحذف
ولكم مني جزيل الشكرررر
#include<iostream.h>
struct tree_node
{
int data;
tree_node *left;
tree_node *right;
};
//------------------------------
tree_node *t;
void creat();
void insert(int a,tree_node *&t);
int find_min(tree_node *t);
tree_node *find_element(int b,tree_node *&t);
void remove(int x,tree_node *&t);
void print(tree_node *t);
//----------------------------------
void creat()
{
t=NULL;
}
//-------------------------------
void insert(int a,tree_node *&t)
{
if(t == NULL)
{
t = new tree_node;
t->data = a;
t->left=NULL;
t->right=NULL;
}
else
{
if(a==t->data)
cout<<"can not insert ";
if(t->data > a)
insert(a,t->left);
if(t->data < a)
insert(a,t->right);
}
}
//-------------------------------
int find_min(tree_node *t)
{
tree_node *p = t;
if(p!=NULL)
{
while(p->left != NULL)
{
p=p->left;
}
return p->data;
}
else
cout<<" it is empty ";
}
//-----------------------------------------
tree_node *find_element(int b,tree_node *&t)
{
if(t == NULL)
return NULL;
else
{
if(t->data==b)
return t;
tree_node *a = t;
while(a != NULL && a->data != b)
{
if(t->data > b)
a = a->left;
if(t->data < b)
a= a->right;
}
return a;
}
}
//----------------------------------
void remove(int x,tree_node *&t)
{
if(t==NULL)
cout<<"\n"<<"empty ";
else
if(x<t->data)
remove(x,t->left);
else
if( x > t->data)
remove(x,t->right);
else
{
if(t->left!=NULL && t->right!=NULL)
{
t->data= find_min(t->right);
remove(x,t->right);
}
else
{
tree_node *p = t;
t = (t->left != NULL)?t->left:t->right;
delete p;
}
}
}
//---------------------------------------------
void print(tree_node *t)
{
if(t!= NULL)
{
cout<<"(";
print(t->left);
print(t->right);
cout<<t->data;
cout<<")";
}
}
//----------------------------------------------
void main()
{
cout<<"1-insert \n2-find_min \n3-find_element \n4- remove \n5-print \n";
creat();
int w=1;
int b;
tree_node *c;
while(w!=0)
{
cin>>w;
if(w==1)
{
cout<<"value=";
cin>>b;
insert(b,t);
}
else
if(w==2)
{
cout<<"min value =";
b=find_min(t);
cout<<b;
}
else if(w==3)
{
cout<<"value find = ";
cin>>b;
c=find_element(b,t);
cout<<c;
}
else
if(w==4)
{
cout<<"delete value= ";
cin>>b;
remove(b,t);
}
else
if(w==5)
{
cout<<" ( ";
print(t);
cout<<" ) ";
cout<<"\n";
}
}
}
عندي برنااااامج عن الاشجار (tree)
وكتبت البرنامج وتنفذ معي
لكن دلة remove ماتحذف الا الجذور اما الاب ماتحذفه
هو ضابظ معي بس ابي احد يساعدني على تعديل بسيط بدالة الحذف
ولكم مني جزيل الشكرررر
#include<iostream.h>
struct tree_node
{
int data;
tree_node *left;
tree_node *right;
};
//------------------------------
tree_node *t;
void creat();
void insert(int a,tree_node *&t);
int find_min(tree_node *t);
tree_node *find_element(int b,tree_node *&t);
void remove(int x,tree_node *&t);
void print(tree_node *t);
//----------------------------------
void creat()
{
t=NULL;
}
//-------------------------------
void insert(int a,tree_node *&t)
{
if(t == NULL)
{
t = new tree_node;
t->data = a;
t->left=NULL;
t->right=NULL;
}
else
{
if(a==t->data)
cout<<"can not insert ";
if(t->data > a)
insert(a,t->left);
if(t->data < a)
insert(a,t->right);
}
}
//-------------------------------
int find_min(tree_node *t)
{
tree_node *p = t;
if(p!=NULL)
{
while(p->left != NULL)
{
p=p->left;
}
return p->data;
}
else
cout<<" it is empty ";
}
//-----------------------------------------
tree_node *find_element(int b,tree_node *&t)
{
if(t == NULL)
return NULL;
else
{
if(t->data==b)
return t;
tree_node *a = t;
while(a != NULL && a->data != b)
{
if(t->data > b)
a = a->left;
if(t->data < b)
a= a->right;
}
return a;
}
}
//----------------------------------
void remove(int x,tree_node *&t)
{
if(t==NULL)
cout<<"\n"<<"empty ";
else
if(x<t->data)
remove(x,t->left);
else
if( x > t->data)
remove(x,t->right);
else
{
if(t->left!=NULL && t->right!=NULL)
{
t->data= find_min(t->right);
remove(x,t->right);
}
else
{
tree_node *p = t;
t = (t->left != NULL)?t->left:t->right;
delete p;
}
}
}
//---------------------------------------------
void print(tree_node *t)
{
if(t!= NULL)
{
cout<<"(";
print(t->left);
print(t->right);
cout<<t->data;
cout<<")";
}
}
//----------------------------------------------
void main()
{
cout<<"1-insert \n2-find_min \n3-find_element \n4- remove \n5-print \n";
creat();
int w=1;
int b;
tree_node *c;
while(w!=0)
{
cin>>w;
if(w==1)
{
cout<<"value=";
cin>>b;
insert(b,t);
}
else
if(w==2)
{
cout<<"min value =";
b=find_min(t);
cout<<b;
}
else if(w==3)
{
cout<<"value find = ";
cin>>b;
c=find_element(b,t);
cout<<c;
}
else
if(w==4)
{
cout<<"delete value= ";
cin>>b;
remove(b,t);
}
else
if(w==5)
{
cout<<" ( ";
print(t);
cout<<" ) ";
cout<<"\n";
}
}
}
