Форум программистов, компьютерный форум CyberForum.ru

Бинарные деревья - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
УмкаССервера
0 / 0 / 0
Регистрация: 12.06.2010
Сообщений: 14
18.11.2010, 07:27     Бинарные деревья #1
Здравствуйте!! Передо мной стоит не простая задача....Описать класс, реализующий бинарное дерево, обладающее возможностью добавления новых элементов, удаления существующих, поиска элемента по ключу, а также последовательного доступа ко всем элементам.
Написать программу, использующую этот класс для представления англо-русского словаря....
я ужасно не дружу с бинарными деревьями!! Нашла программу реализации бинарного дерева с помощью класса, но для данных тип int...и даже её не могу переделать под свою задачу...помогите пожалуйста..как обычно сроки поджимают....


#include "stdafx.h"
#include<iostream>
#include<math.h>

using namespace std;

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 CleanTree (node **);
void ObhodEnd (node **);
void ObhodLeft (node **);
void ObhodBack (node **);
void Vyvod (node**,int);
int Height (node**);
};

void main ()
{
TREE A;

A.BuildTree ();
cout<<"\nВывод дерева:\n";
A.Vyvod (A.GetTree(),0);
cout<<"\nВысота дерева:"<<A.Height(A.GetTree())<<endl;
cout<<"\nЛевосторонний обход дерева: ";
A.ObhodLeft (A.GetTree());
cout<<"\nКонцевой обход дерева: "; A.ObhodEnd (A.GetTree());
cout<<"\nОбратный обход дерева: "; A.ObhodBack (A.GetTree());
A.CleanTree (A.GetTree());
}

void TREE::BuildTree ()
// Построение бинарного дерева (рекурсивный алгоритм).
// Tree - указатель на корень дерева.
{

int el;

cout<<"Vvedite klyuch dereva ...\n";
cin>>el;
while (el!=0)
{ Search (el,&Tree); cin>>el; }
}

void TREE::Search (int x,node **p)
// Поиск вершины с ключом x в дереве со вставкой
// (рекурсивный алгоритм).
// *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;
}

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);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.11.2010, 07:27     Бинарные деревья
Посмотрите здесь:

Любимые бинарные деревья. C++
C++ Бинарные деревья, очереди, стеки
Задача про Бинарные деревья! C++
Бинарные деревья C++
Бинарные деревья C++
Бинарные деревья с обратной связью C++
C++ Бинарные деревья
C++ Бинарные деревья
Бинарные деревья и поиск по ним C++
Бинарные деревья и алгоритмы работы с ними C++
C++ Бинарные деревья: неправильный вывод
Бинарные деревья C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 17:39. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru