|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
09.11.2010, 22:11 | #1 |
Регистрация: 02.06.2010
Сообщений: 6
|
Не могу доделать
/*
7. Имеется массив записей, расположенных по возрастанию некоторого ключевого поля. Одинаковых ключей нет. Построить из элементов массива бинарное дерево такое, что для каждой вершины ключ левого сына меньше ключа отца, а ключ отца меньше ключа правого сына. Составить программу быстрого поиска элемента с заданным ключом, возвращающую номер элемента массива, если есть элемент с этим ключом. Если такого элемента нет, выдать соответствующее сообщение. */ #include <iostream.h> #include <conio.h> #include <stdio.h> #include <windows.h> struct node { int Key; int Count; node *Left; node *Right; }; class TREE { private: node *Tree; // Указатель на корень дерева. void Search (int,node**); public: TREE() { Tree = NULL; } node** GetTree () { return &Tree; } // Получение вершины дерева. // Прототипы, используемых в программе, функций. void BuildTree (); void Vyvod (node**,int); void MASSIV_ZAPISEY(); }; void main () { TREE A; A.BuildTree (); cout << "\nVyvod dereva:\n"; A.Vyvod (A.GetTree(),0); cout << "\n\n\n\n\n\nNazhmite lubuyu klavishu dlya vyhoda:"; getch(); } void TREE::BuildTree () // Tree - указатель на корень дерева. { int el; cout << "Vvedite klyuchi vershin dereva:\t\n" << endl; cin >> el; while (el != 0) { Search (el, &Tree); cin >> el; } } void TREE::MASSIV_ZAPISEY() { int A[5] = {1,2,3,4,5}; // odinakovyh klyuchey net int i; for (i=0; i<5; i++) getch(); } void TREE::Search (int x,node **p) /* *p - указатель на корень дерева. */ { if (*p == NULL) {// Вершины в дереве нет; включим ее. *p = new(node); // Выделим память. (**p).Key = x; (**p).Count = 1; (**p).Left = NULL; (**p).Right = NULL; } else if (x<(**p).Key) Search (x,&((**p).Left)); else if (x>(**p).Key) Search (x,&((**p).Right)); else (**p).Count = (**p).Count + 1; //delete *p; } void TREE::Vyvod (node **w,int l) // *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); } } |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Доделать исходник | alex0097 | Фриланс | 8 | 27.07.2010 15:26 |
Не могу всё никак не могу эту лабораторку сдать помогите плиз | Dimon.ru | Паскаль, Turbo Pascal, PascalABC.NET | 2 | 16.06.2009 20:53 |