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

Бинарное дерево - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ В чем разница создания объекта? http://www.cyberforum.ru/cpp-beginners/thread563008.html
#include <iostream.h> #include <conio.h> class B {private: int b1,b2; public: B() {cout<<"Constructor B without parameters"<<endl; } B(int i, int j):b1(i),b2(j) {cout<<"Constructor B with...
C++ Волновой алгоритм (шахматы, конь) Всем привет! Пытался написать волновой алгоритм для нахождения кратчайшего пути коня на шахматной доски из A->B. Но что-то у меня пути некорректно рисует. #include<iostream> http://www.cyberforum.ru/cpp-beginners/thread563006.html
C++ очистка буфера клавиатуры как это сделать?
как очистить буфер клавиатуры?в программе только первое нажатие запоминается! #include <conio.h> #include <stdio.h> #include <graphics.h> void Draw ( int x, int y, int color ) { setfillstyle (...
C++ Муз проигрыватель на с++
Здравствуйте нужно написать муз проигрыватель на языке с++ Должно быть включено: перемотка, остановка, воспроизведение, запись
C++ Работа с файлами. http://www.cyberforum.ru/cpp-beginners/thread562972.html
Делаю лабу по информатике. Задача не самая сложная. Но я не могу понять одной вещи. Программа создает txt файл, (дальнейшие с ним операции), и если пользователь не выходит начинает заново. И заново...
C++ Даны три слова.Напечатать их общие буквы (из паскаля в с++) program q; var s1,s2,s3:string; m1,m2,m3,m4:set of char; l1,l2,l3,i1,i2,i3:integer; j:char; begin readln(s1,s2,s3); l1:=length(s1); l2:=length(s2);... подробнее

Показать сообщение отдельно
dima12494
0 / 0 / 0
Регистрация: 06.01.2012
Сообщений: 5

Бинарное дерево - C++

01.05.2012, 19:31. Просмотров 297. Ответов 0
Метки (Все метки)

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


Вот код


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#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::ostream & 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::ostream & ost, std::string delim = " "){
        dumpNodes(ost, root, delim);
    }
 
    bool empty(){
        return ! root;
    }
};
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru