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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.05.2012, 19:36   #1
dima12494
Новичок
Джуниор
 
Регистрация: 01.05.2012
Сообщений: 1
По умолчанию Бинарное дерево

Помогите
Добавить перегрузку следующих операторов в виде методов контейнерного класса
+ добавление элемента;
+ добавление элементов;
> отношение порядка;
! реверс символов строк;
[] индексирование;
= копирование;
Добавить перегрузку следующих операторов в виде дружественных функций
- удаление элемента;
== отношение равенства 2 контейнеров;
~ обмен соседних строк в контейнере местами;
<< вывод значения контейнера в стандартный поток вывода


Вот код


#include <iostream>


template <typename T>
class Bintree {
class Node {
friend class Bintree;
T * value;
Node * parent;
Node * left;
Node * right;
Node(const T & val, Node * p = 0) : parent(p), left(0), right(0) {
value = new T(val);
}
~Node(){
delete value;
}
};

Node * root;

bool insertNode(const T & val, Node * & n, Node * p = 0){
if ( ! n ){
n = new Node(val, p);
return true;
}
else if ( *(n->value) > val )
return insertNode(val, n->left, n);
else if ( *(n->value) < val )
return insertNode(val, n->right, n);
else
return false;
}

void insertTree(Node * & n, Node * t){
if ( ! n || ! t )
return;
insertTree(n, t->left);
insertTree(n, t->right);
insertNode(*(t->value), n);
}

void delTree(Node * n){
if ( ! n )
return;
delTree(n->left);
delTree(n->right);
delete n;
n = 0;
}

Node * findNode(const T & val, Node * n) {
if ( ! n )
return 0;
else if ( *(n->value) == val )
return n;
else if ( *(n->value) > val )
return findNode(val, n->left);
else
return findNode(val, n->right);
}

void dumpNodes(std:stream & ost, Node * n, std::string delim = " ") {
if ( ! n )
return;
dumpNodes(ost, n->left, delim);
ost <<std::endl<< *(n->value) << std::endl;
dumpNodes(ost, n->right, delim);
}

// çàêðûòûé êîíñòðóêòîð êîïèðîâàíèÿ
Bintree(const Bintree &);
Bintree operator = (const Bintree &);

public:
Bintree() : root(0) {}
~Bintree(){
delTree(root);
}

void add(const T & val){
if ( ! insertNode(val, root) )
throw ( std::string("Value exists!") );
}

void remove(const T & val){
Node * n = findNode(val, root);
if ( ! n ){
throw ( std::string("Value not found!") );
}
else if ( n == root ){
if ( ! n->right ){
Node * nroot = n->left;
delete root;
if ( root = nroot )
root->parent = 0;
}
else {
Node * nroot = root->right;
Node * nleft;
for ( nleft = nroot; nleft->left; nleft = nleft->left )
;
nleft->left = root->left;
delete root;
root = nroot;
root->parent = 0;
}
}
else {
Node * & p = n->parent;
if ( n == p->left )
p->left = 0;
else
p->right = 0;
insertTree(p, n->left);
insertTree(p, n->right);
delTree(n);
}
}

void dump(std:stream & ost, std::string delim = " "){
dumpNodes(ost, root, delim);
}

bool empty(){
return ! root;
}
};
dima12494 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Бинарное дерево Си Evacuator Помощь студентам 2 01.06.2011 21:40
бинарное дерево Intess Помощь студентам 0 23.05.2011 15:58
бинарное дерево Lucefer2007 Общие вопросы C/C++ 0 17.04.2011 14:31
Бинарное дерево CFYZ-07 Помощь студентам 0 16.03.2010 23:24