|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
01.11.2011, 02:37 | #1 |
Новичок
Джуниор
Регистрация: 01.11.2011
Сообщений: 2
|
Бинарное дерево
Здравствуйте. Помогите сделать задачу. Надо построить бинарное дерево для хранения и операций с данными вида наименование товара-количество-цена. Сутки просидел, переделывал код Дейтла. Не получается.
|
05.11.2011, 23:21 | #2 |
Новичок
Джуниор
Регистрация: 01.11.2011
Сообщений: 2
|
Вот код:
#include<iostream> using std::cout; using std::cin; using std::endl; #include "tree.h" #include <string> using std::string; int main () { setlocale(LC_CTYPE,"Russian"); TREE A; A.BuildTree (); cout<<"\nВывод дерева:\n"; A.Vyvod (A.GetTree(),0); cout<<"\nВысота дерева:"<<A.Height(A.GetTree())<<en dl; cout<<"\nЛевосторонний обход дерева: "; A.ObhodLeft (A.GetTree()); cout<<"\nКонцевой обход дерева: "; A.ObhodEnd (A.GetTree()); cout<<"\nОбратный обход дерева: "; A.ObhodBack (A.GetTree()); A.CleanTree (A.GetTree()); A.copy (A.GetTree(), A.GetTree2()); cout<<"\nВывод дерева:\n"; A.Vyvod (A.GetTree2(),0); cout<<"\nВысота дерева:"<<A.Height(A.GetTree2())<<e ndl; cout<<"\nЛевосторонний обход дерева: "; A.ObhodLeft (A.GetTree2()); cout<<"\nКонцевой обход дерева: "; A.ObhodEnd (A.GetTree2()); cout<<"\nОбратный обход дерева: "; A.ObhodBack (A.GetTree2()); A.CleanTree (A.GetTree2()); } void TREE::BuildTree () // Построение бинарного дерева (рекурсивный алгоритм). // Tree - указатель на корень дерева. { string el="a"; int k=0; double v=0; cout<<"Введите название товара ...\n"; cin>>el; while(el!="kinec") { cout<<"Введите количество товара ...\n"; cin>>k; cout<<"Введите цену товара ...\n"; cin>>v; Search (el,k,v,&Tree); cout<<"Введите название товара ...\n"; cin>>el; }} void TREE::Search (string x,int y, double z, node **p) // Поиск вершины с ключом x в дереве со вставкой // (рекурсивный алгоритм). // *p - указатель на корень дерева. { if (*p==NULL) {// Вершины в дереве нет; включить ее. *p = new (node); (**p).Key = x; (**p).Count = 1; (**p).kilkist=y; (**p).vartist = z; (**p).Left = NULL; (**p).Right = NULL; } else if (x<(**p).Key) Search (x,y,z,&((**p).Left)); else if (x>(**p).Key) Search (x,y,z,&((**p).Right)); else (**p).Count = (**p).Count + 1; } void TREE::ObhodLeft (node **w) //Левосторонний обход дерева. //*w - указатель на корень дерева. { if (*w!=NULL) { cout<<(**w).Key<<" "; ObhodLeft (&((**w).Left)); ObhodLeft (&((**w).Right)); } } void TREE::ObhodEnd (node **w) //Концевой обход дерева. //*w - указатель на корень дерева. { if (*w!=NULL) { ObhodEnd (&((**w).Left)); ObhodEnd (&((**w).Right)); cout<<(**w).Key<<" "; } } void TREE::ObhodBack (node **w) //Обратный обход дерева. //*w - указатель на корень дерева. { if (*w!=NULL) { ObhodBack (&((**w).Left)); cout<<(**w).Key<<" "; ObhodBack (&((**w).Right)); } } void TREE::CleanTree (node **w) //Очистка дерева. //*w - указатель на корень дерева. { if (*w!=NULL) { CleanTree (&((**w).Left)); CleanTree (&((**w).Right)); delete *w; } } void TREE::Vyvod (node **w,int l) //Изображение дерева *w на экране дисплея // (рекурсивный алгоритм). //*w - указатель на корень дерева. { int i; if (*w!=NULL) { Vyvod (&((**w).Right),l+1); for (i=1; i<=l; i++) cout<<" "; cout<<(**w).Key<<endl; Vyvod (&((**w).Left),l+1); } } int TREE::Height (node **w) //Определение высоты бинарного дерева. //*w - указатель на корень дерева. { int h1,h2; if (*w==NULL) return (-1); else { h1 = Height (&((**w).Left)); h2 = Height (&((**w).Right)); if (h1>h2) return (1 + h1); else return (1 + h2); } } void TREE::copy (node **w, node **p2) { if (*w!=0) { *p2= new (node); (*p2)->Key=(*w)->Key; (*p2)->kilkist=(*w)->kilkist; (*p2)->vartist=(*w)->vartist; (*p2)->Count=(*w)->Count; if ((*w)->Left!=0) { copy (&((**w).Left), &((**p2).Left)); } else (*p2)->Left=0; if ((*w)->Right!=0) { copy (&((**w).Right), &((**p2).Right));} else (*p2)->Left=0; } } Помогите сделать копию дерева. Что-то в функции copy не срабатывает - выдает ошибку Program received signal SIGSEGV, Segmentation fault. In ntdll!RtlTimeToTimeFields () (C:\Windows\system32\ntdll.dll) At tree.h:9 |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Бинарное дерево Си | Evacuator | Помощь студентам | 2 | 01.06.2011 21:40 |
бинарное дерево | Intess | Помощь студентам | 0 | 23.05.2011 15:58 |
Бинарное дерево) | Svetlanka_ya | Помощь студентам | 0 | 17.04.2010 11:13 |
Бинарное дерево С++ | Olya90 | Помощь студентам | 1 | 20.10.2009 21:45 |
Бинарное дерево | Lazio | Общие вопросы C/C++ | 2 | 10.09.2009 20:31 |