llerik
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору #include <vcl.h> #include <iostream.h> #include <string.h> #pragma hdrstop #pragma argsused // Структура: struct tree { string eng; //слово int count; //количество обращений tree *left; tree *right; }; string temp_eng; int temp_count; int level=0; // Функция создания первого элемента tree *first (string eng, int count); // Функция поиска и добавления элемента tree *search_insert (tree *root, string eng, int count); // Функция показа дерева void print_tree (tree *p, int level); //--------------------------------------------------- // Главная функция: int main() { int vibor; tree *root=NULL; do { cout<<"Najmite: "<<endl; cout<<"1| Dobavit slovo v slovar"<<endl; cout<<"2| Vihod"<<endl; cout<<"3| Vivesti derevo na ekran"<<endl; cin>>vibor; switch (vibor) { case 1: {cout<<"Vvedite angliskoe slovo: "<<endl; cin>>temp_eng; cout<<"Vvedite znachenie schetchika: "<<endl; cin>>temp_count; //создание первого элемента дерева if (!root) root=first(temp_eng, temp_count); //создание элементо-потомков дерева else tree *root=search_insert (root, temp_eng, temp_count); }; break; case 2: break; case 3: print_tree (root, 0); break; default: cout<<"Нужно нажать клавишу от 1 до 4"<<endl; break; } } while (vibor!=3); return 0; } // Функция фрмирования первого элемента дерева: tree *first (string temp_eng, int count) { tree *pv=new tree; pv->eng=temp_eng; pv->count=temp_count; pv->left=0; pv->right=0; return pv; } // Функция поиска и добавления элемента в дерево: tree *search_insert (tree *root, string temp_eng, int temp_count) { tree *pv=root, *prev; bool found=false; //поиск по дереву while (pv&&!found) { prev=pv; if (temp_eng==pv->eng) found = true; else if (temp_count < pv->count) pv=pv->left; else pv=pv->right; } if (found) return pv; //создание нового узла tree *pnew=new tree; pnew->eng=temp_eng; pnew->count=temp_count; pnew->left=0; pnew->right=0; if (temp_count < prev->count) prev->left=pnew; //присоединение к левому поддереву предка else prev->right=pnew; //присоединение к правому поддереву предка return pnew; } // Функция показа дерева void print_tree (tree *p, int level) {if (p) { print_tree(p->left, level+1); for (int i=0; i<level; i++) cout<<" "; cout<<p->eng<<endl; for (int i=0; i<level; i++) cout<<" "; cout<<p->count<<endl; print_tree (p->right, level+1); } } | Всего записей: 8 | Зарегистр. 02-05-2008 | Отправлено: 19:11 09-05-2008 | Исправлено: llerik, 01:09 10-05-2008 |
|