Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.11.2010, 22:11   #1
ymanety
 
Регистрация: 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);
}
}
ymanety вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Доделать исходник alex0097 Фриланс 8 27.07.2010 15:26
Не могу всё никак не могу эту лабораторку сдать помогите плиз Dimon.ru Паскаль, Turbo Pascal, PascalABC.NET 2 16.06.2009 20:53