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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Определить рекурсивную функцию, которая находит корень уравнения http://www.cyberforum.ru/cpp-beginners/thread215038.html
Здоров Всем ! Как реализовать задачу: Определить рекурсивную функцию, которая находит корень уравнения f(x)=0 на заданном интервале c заданной точностью . Корень ищется методом деления отрезка пополам по сле-дующему алгоритму. Первоначально предполагается, что f(a)f(b)<0. 1) вычисляются f(а), f(b); 2) вычисляется c=(a+b)/2 и f(c); 3) если f(a)f(c)>0, то а=c, в противном...
C++ Вывести строку, в которой все вхождения первого слова заменены на второе слово Ввести строку и два слова. Вывести строку, в которой все вхождения первого слова заменены на второе слово. Программу на Си. Заранее спасибо. http://www.cyberforum.ru/cpp-beginners/thread215021.html
Указатели C++
Ребят, помогите преобразовать код, можно как-то упростить, уменьшить кол-во указателей.. только вот как именно, не понял.. VS 2008; Консольное приложение Win32 // 1.Даны два действительных числа. 1 число умножмть на 10, если оно больше второго, и оба числа умножить на -2, если это не так // 2.Написать функцию, которая по заданному натуральному числу оп-ределяет количество цифр в нем и их...
C++ Массивы и Функции...
помогите пожалуйста с главной фунцкцией...не могу никак сделать #include <stdio.h> #include <stdlib.h> #define N 40 #define M 30 #define P 70 #define S 70 #define T 70
C++ потоки.. http://www.cyberforum.ru/cpp-beginners/thread215007.html
Доброго всем времени суток. При написании программы я столкнулся с проблемой, решение которой, по словам друзей, лежит в потоках. проблема заключается в том, что у меня должен работать таймер(т.е. работать цикл, который его постоянно обновляет) и одновременно должна считываться некая информация с клавиатуры. помогите реализовать, пожалуйста.
C++ Почему не компилит #include <stdio.h> #include <stdlib.h> struct phone { int kod; int tel_stanc; int tel_abon; }; подробнее

Показать сообщение отдельно
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
19.12.2010, 22:19     Бинарное дерево
Вот нашёл у себя
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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
#include <iostream>
#include <string>
 
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 << *(n->value) << delim;
        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;
    }
};
 
int menu(){
    int ret;
    std::cout << "\n1 - add value"
            << "\n2 - remove value"
            << "\n3 - dump values"
            << "\n0 - exit"
            << "\n> ";
    std::cin >> ret;
    return ret;
}
 
int main(){
    Bintree<double> bt;
    int m;
    double val;
 
    while ( m = menu() ){
        switch ( m ){
        case 1 :
            std::cout << "Value to add: ";
            std::cin >> val;
            try {
                bt.add(val);
            }
            catch ( std::string err ){
                std::cerr << "\aError: " << err << std::endl;
            }
            break;
        case 2 :
            std::cout << "Value to remove: ";
            std::cin >> val;
            try {
                bt.remove(val);
            }
            catch ( std::string err ){
                std::cerr << "\aError: " << err << std::endl;
            }
            break;
        case 3 :
            bt.dump(std::cout);
            std::cout << std::endl;
            break;
        default :
            std::cerr << "\aWrong command!" << std::endl;
            break;
        }
    }
 
    return 0;
}
осталось вывод в порядке убывания приделать и по файлам разнести.
 
Текущее время: 04:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru