بسم الله الرحمن الرحيم
السلام عليكم
برنامجي هو الأضافة الي الشجرة بحيث استخدم الاستعادة الذاتية حاولت فيه توجد فيه مشكلة انه يضيف اول مرة ثم يتوقف البرنامج
رجاء مساعدتي في حل الخطا
وشكرا
#include<iostream.h>
#include<stdio.h>
#include<conio.h>
struct info
{char name[20];
int no;
};
struct data
{ info d;
data *left,*right;
};
class list_dam
{private:
data *node,*Root;
int flag,flag2;
public:
list_dam(){flag=1;Root=NULL;};
void Show_tree(data *);
void search();
friend data * XXXX(list_dam);
void Add(data *);
void sss(data *,data *);
};
data * XXXX(list_dam t);
void main()
{int i;
list_dam A;
cout<<endl;
cout<<"***********************************welcome**************************************\n";
cout<<endl;
do
{
cout<<"|------------------main menu---------------|"<<endl;
cout<<"|press 1 to Add node to tree |"<<endl;
cout<<"|press 2 to search in node from tree |"<<endl;
cout<<"|press 3 to show the tree |"<<endl;
cout<<"|press 4 to exit |"<<endl;
cout<<"|now please chose |"<<endl;
cout<<"|------------------------------------------|"<<endl;
cin>>i;
switch(i)
{
case 1:
{A.Add(XXXX(A));
break;}
case 2:
{
A.search();
break;}
case 3:
{A.Show_tree(XXXX(A));
break;}
case 4:
cout<<"now you will exit form program\n";
}}while(i!=4);
}
/* function for show tree*/
void list_dam:: Show_tree(data *t )
{
if(t!=NULL)
{
//cout<<t->d.name<<"\t"<<t->d.no<<endl;;
Show_tree(t->left);
//cout<<t->d.name<<"\t"<<t->d.no<<endl;
Show_tree(t->right);
cout<<t->d.name<<"\t"<<t->d.no<<endl;
}
}
data * XXXX(list_dam t)
{
return t.Root;
}
/* function for search in tree*/
void list_dam::search()
{data *search;
int no,f=0;
cout<<"Please enter your number for search"<<endl;
cin>>no;
cout<<endl;
search=Root;
while(search!=NULL)
{if(no==search->d.no)
{f=1;
break;}
else
if(no>(search->d.no))
search=search->right;
else
search=search->left;}
if(flag==0)
cout<<"Sorry no data"<<endl;
else
cout<<"found it"<<endl;
}
/*function for add to tree*/
void list_dam::Add (data *a)
{data *node;
node=new data;
gets(node->d.name);
cin>>node->d.no;
node->left=node->right =NULL;
if(a==NULL)
{
Root=node;
Root->left=Root->right =NULL;
}
else
while(a!=NULL)
{sss( a,node);
}
}
void list_dam::sss(data *a,data *node)
{
if(a->d.no<node->d.no)
{if(a->right==NULL)
{a->right=node;
}
else
a=a->right;}
else
{if(a->left==NULL)
{a->left=node;
}
else
a=a->left;
}}