#include #include #include #include #include using namespace std; bool WIN=false; class leaf // один узел { int info; struct leaf *vniz, *right; public: leaf(int x) // конструктор вместо функции создания узла нового дерева { info = x ; vniz = right = NULL; cout<<"zapisal-"<9 && x!=-1) //если это не последняя цифра числа { if(vniz) vniz->f(x/10); else { vniz=new leaf((x/10)%10); if(x>100) vniz->f(x/10); else vniz->vniz=new leaf(-1); } } else // если это единственная цифра { if(x!=-1) { if(vniz) vniz->f(-1); else vniz=new leaf(-1); // создаем указатель-узел, указывающий на конечность набора } } } else { if(right) right->f(x); else { if(x!=-1) right=new leaf(x%10); else { right=new leaf(-1); return this; } if(x>9) right->f(x); else right->vniz=new leaf(-1); } } return this ; }; void fp(int x) //функция проверки наличия такого числа в дереве { int n=x%10; if(n==info) { if(x>9) { vniz->fp(x/10); } else { if(n==-1) WIN=1; else vniz->fp(-1); } } else if(right) right->fp(x); else WIN=false; } void fob()// функция прямого обхода дерева { cout<fob(); if(right) right->fob(); } void fy() // функция удаления элемента из дерева { if(vniz) vniz->fy(); if(right) right->fy(); delete this; } }; leaf* fr(char *name) //чтение дерева из файла { FILE *fff; leaf* tree=NULL; int c,n; if((fff=fopen(name,"rb"))== NULL) { cout<<"\n ошибка открытия файла, попробуйте ввести имя снова. \n"; system("PAUSE"); return tree; } fseek(fff, 0, SEEK_END ); c=ftell(fff)/(sizeof(int)); rewind(fff); // отмотка файла на начало for(int i=0; if(n); } if(!fclose(fff)) { cout<<"\n данные успешно добавлены \n"; return tree; } } int main() { int n; bool z=false; leaf *tree=NULL; char name[20]; setlocale(LC_ALL, "Russian"); // чтение леса из файла do { cout<<"введите имя файла: "<>name; tree=fr(name); } while(!tree); // вводим проверяемые цифры cout<<"функция прямого обхода леса:"<fob(); cout<>n; tree->fp(n); if(WIN) cout<<" есть такое число"<fy(); return 0; }