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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.05.2010, 18:59   #1
Voxa7
Пользователь
 
Регистрация: 17.05.2010
Сообщений: 59
По умолчанию Бинарное дерево С++

Помогите написать програму для нахождения и печати найдлиннейшой ветки бинарного дерева. Мне нужна только одна функция которая будет возвращать итератор или указатель на листовой элемент найдлиннейшой ветки дерева.
Вот исходник кода для работы с деревом, именно под нево надо написать функцию:
Цитата:
//---------------------------------------------------------------------------

#pragma hdrstop
# include<iostream.h>
#include<stdlib.h>
#include<conio.h>
//---------------------------------------------------------------------------

#pragma argsused

template<class K,class V>
struct Pair
{
K first;
V second;
Pair(){};
Pair(K f,V s):first(f),second(s){};
};

template <class K,class V>
class BinaryTree
{ public:
Pair<K,V> Body;
BinaryTree *Left,*Right,*Parent;

class Iterator
{
BinaryTree *pointer;
friend class BinaryTree;
public:
Iterator()ointer(NULL){};
int IsValid(){return pointer!=NULL;};
int HasLeft(){return (pointer!=NULL)&&(pointer->Left!=NULL);};
int HasRight(){return (pointer!=NULL)&&(pointer->Right!=NULL);};
int HasParent(){return (pointer!=NULL)&&(pointer->Parent!=NULL);};
void MoveLeft(){ if(IsValid()) pointer=pointer->Left;};
void MoveRight(){ if(IsValid()) pointer=pointer->Right;};
void MoveUp(){ if(IsValid()) pointer=pointer->Parent;};
Pair<K,V>* operator-> (){return &pointer->Body;};
};
friend class Iterator;

BinaryTree():Left(NULL),Right(NULL) ,Parent(NULL){};
BinaryTree(const BinaryTree&);
BinaryTree(const Pair<K,V>& a):Left(NULL),Right(NULL),Parent(NU LL),Body(a){};
BinaryTree& operator= (const BinaryTree&);
void Insert(const Pair<K,V>& a);
Iterator Find(K);
Iterator GetRoot();
void Print();
~BinaryTree();
};


template <class K,class V>
BinaryTree<K,V>::BinaryTree(const BinaryTree& a):Body(a.Body),Left(NULL),Right(NU LL),Parent(NULL)
{
if(a.Left)
{
Left=new BinaryTree(*a.Left);
Left->Parent=this;
};
if(a.Right)
{
Right=new BinaryTree(*a.Right);
Right->Parent=this;
};
};

template <class K,class V>
BinaryTree<K,V>& BinaryTree<K,V>:perator= (const BinaryTree& a)
{
if(this==&a) return *this;
delete[] Left;
delete[] Right;
Body=a.Body;
if(a.Left)
{
Left=new BinaryTree(*a.Left);
Left->Parent=this;
};
if(a.Right)
{
Right=new BinaryTree(*a.Right);
Right->Parent=this;
};

};

template <class K,class V>
BinaryTree<K,V>::~BinaryTree()
{
if(Left) delete Left;
if(Right) delete Right;
Left=Right=NULL;
};

template <class K,class V>
void BinaryTree<K,V>::Print()
{
if(Left){ Left->Print();cout<<" ";};
cout<<"("<<Body.first<<", "<<Body.second<<")";
if(Right){ cout<<" ";Right->Print();};
};

template <class K,class V>
void BinaryTree<K,V>::Insert(const Pair<K,V>& a)
{
if(Body.first>a.first)
{
if(!Left) Left = new BinaryTree(a);
else Left->Insert(a);
}
else
{
if(!Right) Right = new BinaryTree(a);
else Right->Insert(a);
};
};

template <class K,class V>
BinaryTree<K,V>::Iterator BinaryTree<K,V>::GetRoot()
{
Iterator it;
it.pointer=this;
return it;
};

template <class K,class V>
BinaryTree<K,V>::Iterator BinaryTree<K,V>::Find(K Key)
{
Iterator it;
BinaryTree *t=this;
while(t!=NULL)
{
if(Key==t->Body.first)
{
it.pointer=t;
break;
};
if(Key<t->Body.first) t=t->Left;
else t=t->Right;
};
return it;
};

int main()
{ int c=0,m=0;
BinaryTree<int,int> T(Pair<int,int>(50,50));
randomize();
for(int i=0;i<100;i++)
{
int k=random(100);
T.Insert(Pair<int,int>(k,k));
};
T.Print();
getch();
}
Помогите плиз!!!
Voxa7 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Бинарное дерево) Svetlanka_ya Помощь студентам 0 17.04.2010 11:13
бинарное дерево СИ Anastasia.K Помощь студентам 0 31.10.2009 18:16
Бинарное дерево С++ Olya90 Помощь студентам 1 20.10.2009 21:45
Бинарное дерево Lazio Общие вопросы C/C++ 2 10.09.2009 20:31