Бинарное дерево поиска.
Нужно создать программу обработки картотеки, используя бинарное дерево поиска.
Есть проблема - если выводить объект (содержимое всех его полей) прямо после создания, то все ок, читает из файла и заполняет корректно. Если же использовать метод output_tree(TREE *p), то выводятся всякие кракозябры) Как бы мне это исправить?
class TREE
{
public:
int key;
char name[20];
char surname[20];
char otchestvo[20];
int nomer_otdela;
char sl_tel[20];
char dom_tel[20];
TREE *Tree;
TREE *left;
TREE *right;
void insert(TREE obj, TREE *&p);
void create_tree(ifstream&in, int number);
void output_tree(TREE *p);
};
void TREE::insert(TREE obj, TREE *&p)
{
if (p==NULL)
{
p=new TREE;
p->key=obj.key;
strcpy(p->name, obj.name);
strcpy(p->surname, obj.surname);
strcpy(p->otchestvo, obj.otchestvo);
p->nomer_otdela=obj.nomer_otdela;
strcpy(p->sl_tel, obj.sl_tel);
strcpy(p->dom_tel, obj.dom_tel);
p->left=NULL;
p->right=NULL;
}
else
if (obj.key < p->key)
insert(obj, p->left);
else
if (obj.key > p->key)
insert(obj, p->right);
}
void TREE::create_tree(ifstream&in, int number)
{
Tree=NULL;
string name[20];
string surname[20];
string otchestvo[20];
int nomer_otdela[20];
string sl_tel[20];
string dom_tel[20];
int i;
for (i=0; i < number; i++)
{
in>>name[i];
in>> surname[i];
in>>otchestvo[i];
in>> nomer_otdela[i];
in>>sl_tel[i];
in>>dom_tel[i];
}
for (i=0; i < number; i++)
{
int c;
TREE *obj;
obj=new (TREE);
cin >> c;
obj->key=c;
strcpy(obj->name, name[i].c_str());
strcpy(obj->surname, surname[i].c_str());
strcpy(obj->otchestvo, otchestvo[i].c_str());
obj->nomer_otdela=nomer_otdela[i];
strcpy(obj->sl_tel, sl_tel[i].c_str());
strcpy(obj->dom_tel, dom_tel[i].c_str());
insert(*obj, Tree);
cout<<"***";
delete obj;
}
}
void TREE::output_tree(TREE *p)
{
if(p!=NULL)
{
output_tree(p->left);
cout < < p->key < < "\n"< < p- > name < < "\n" < < p->surname < <
"\n" < < p->otchestvo < < "\n"< < p-> nomer_otdela < <"\n"< < p-> sl_tel
< <"\n" < < p-> dom_tel < < "\n";
output_tree(p-> right);
}
}
void main()
{
ifstream in("Tree.txt");
if(!in)
cout<<"Can't open file";
TREE a;
a.create_tree(in, 1);
a.output_tree(&a);
getch();
}
Есть проблема - если выводить объект (содержимое всех его полей) прямо после создания, то все ок, читает из файла и заполняет корректно. Если же использовать метод output_tree(TREE *p), то выводятся всякие кракозябры) Как бы мне это исправить?
class TREE
{
public:
int key;
char name[20];
char surname[20];
char otchestvo[20];
int nomer_otdela;
char sl_tel[20];
char dom_tel[20];
TREE *Tree;
TREE *left;
TREE *right;
void insert(TREE obj, TREE *&p);
void create_tree(ifstream&in, int number);
void output_tree(TREE *p);
};
void TREE::insert(TREE obj, TREE *&p)
{
if (p==NULL)
{
p=new TREE;
p->key=obj.key;
strcpy(p->name, obj.name);
strcpy(p->surname, obj.surname);
strcpy(p->otchestvo, obj.otchestvo);
p->nomer_otdela=obj.nomer_otdela;
strcpy(p->sl_tel, obj.sl_tel);
strcpy(p->dom_tel, obj.dom_tel);
p->left=NULL;
p->right=NULL;
}
else
if (obj.key < p->key)
insert(obj, p->left);
else
if (obj.key > p->key)
insert(obj, p->right);
}
void TREE::create_tree(ifstream&in, int number)
{
Tree=NULL;
string name[20];
string surname[20];
string otchestvo[20];
int nomer_otdela[20];
string sl_tel[20];
string dom_tel[20];
int i;
for (i=0; i < number; i++)
{
in>>name[i];
in>> surname[i];
in>>otchestvo[i];
in>> nomer_otdela[i];
in>>sl_tel[i];
in>>dom_tel[i];
}
for (i=0; i < number; i++)
{
int c;
TREE *obj;
obj=new (TREE);
cin >> c;
obj->key=c;
strcpy(obj->name, name[i].c_str());
strcpy(obj->surname, surname[i].c_str());
strcpy(obj->otchestvo, otchestvo[i].c_str());
obj->nomer_otdela=nomer_otdela[i];
strcpy(obj->sl_tel, sl_tel[i].c_str());
strcpy(obj->dom_tel, dom_tel[i].c_str());
insert(*obj, Tree);
cout<<"***";
delete obj;
}
}
void TREE::output_tree(TREE *p)
{
if(p!=NULL)
{
output_tree(p->left);
cout < < p->key < < "\n"< < p- > name < < "\n" < < p->surname < <
"\n" < < p->otchestvo < < "\n"< < p-> nomer_otdela < <"\n"< < p-> sl_tel
< <"\n" < < p-> dom_tel < < "\n";
output_tree(p-> right);
}
}
void main()
{
ifstream in("Tree.txt");
if(!in)
cout<<"Can't open file";
TREE a;
a.create_tree(in, 1);
a.output_tree(&a);
getch();
}
