Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
 Аватар для XudaH
13 / 13 / 0
Регистрация: 04.05.2009
Сообщений: 130

описать класс дерево.

26.04.2011, 18:12. Показов 2777. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем. Вот поиск мучил, мучил, ничего дельного не нашёл(( Нужен код программы для задачи:
Нужно описать класс дерево(желательно бинарное) и чтобы в нем были функции:
1)Добавление элемента
2)Удаление элемента
3)Поиск элемента
Чтобы в поиск вводилось значение(тобишь в консоле). Чтобы добавлялось в ветвь в наименьший лист дерева(нужно, но не обязательно ;-)) и чтобы при удалении элемента из дерева, удалялись и все его "потомки". Ну и соответственно вывести дерево на экран.
Если у кого остались исходники, поделитесь пожалуйста. Заранее благодарен ;-)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.04.2011, 18:12
Ответы с готовыми решениями:

Описать класс, реализующий бинарное дерево
Здравствуйте! Возникли проблемы с реализацией одной программы ....Описать класс, реализующий бинарное дерево, обладающее возможностью...

Описать класс, реализующий бинарное дерево
помогите ..ребят знаю что обсуждалось уже кучу раз..но у мне выдаёт ошибки..разобраться не могу..эту роботу должна сдать очень скоро..(( ...

Описать класс, реализующий бинарное дерево
Описать класс, реализующий бинарное дерево, обладающее возможностью добавления новых элементов, удаления существующих, поиска элемента по...

10
30 / 30 / 13
Регистрация: 04.04.2011
Сообщений: 86
26.04.2011, 18:17
лови, недавно сдала похожую лабу. Там был массив на основе бинарного дерева.

PS есть отличия от твоего задания, переделай сам тогда, ибо бОльшая часть реализована.
Вложения
Тип файла: rar Lab02.rar (624.9 Кб, 163 просмотров)
1
 Аватар для XudaH
13 / 13 / 0
Регистрация: 04.05.2009
Сообщений: 130
26.04.2011, 18:21  [ТС]
Цитата Сообщение от Katenkka Посмотреть сообщение
лови, недавно сдала похожую лабу. Там был массив на основе бинарного дерева.

PS есть отличия от твоего задания, переделай сам тогда, ибо бОльшая часть реализована.
спасибо большое, только с формами мне не нужно(( чтобы было это все в конслои(
0
30 / 30 / 13
Регистрация: 04.04.2011
Сообщений: 86
26.04.2011, 18:24
ааа, ну так это даже проще
Скинула с формами, потому что в теме С++ Builder, упс )

ща что-нибудь подскажу...

Добавлено через 1 минуту
там просто нужно заменить в соответствующих местах Form на cout / cin
0
 Аватар для XudaH
13 / 13 / 0
Регистрация: 04.05.2009
Сообщений: 130
26.04.2011, 20:23  [ТС]
к сожалению, я вообще нуб в си)) что нибудь удалю не то или заменю)))

Добавлено через 1 час 56 минут
может исходники у кого нибудь хоть какие остались? Хотя бы чтобы добавлялся элемент дерева, удалялся, выводилось дерево на экран и были поддеревья??
0
30 / 30 / 13
Регистрация: 04.04.2011
Сообщений: 86
26.04.2011, 20:24
у меня есть паскалевские ещё
1
 Аватар для XudaH
13 / 13 / 0
Регистрация: 04.05.2009
Сообщений: 130
26.04.2011, 20:48  [ТС]
Цитата Сообщение от Katenkka Посмотреть сообщение
у меня есть паскалевские ещё
только на билдере нужно((
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
26.04.2011, 20:57
Просто Katenkka предлагает использовать паскалевский код, по-понятному - перевести на с++.
1
 Аватар для XudaH
13 / 13 / 0
Регистрация: 04.05.2009
Сообщений: 130
26.04.2011, 21:01  [ТС]
Цитата Сообщение от LK Посмотреть сообщение
Просто Katenkka предлагает использовать паскалевский код, по-понятному - перевести на с++.
ну если есть специалисты такие, которые могут перекодировать)) не очень то и просто наверное перевести с одного языка на другой(
0
30 / 30 / 13
Регистрация: 04.04.2011
Сообщений: 86
26.04.2011, 21:09
Цитата Сообщение от XudaH Посмотреть сообщение
ну если есть специалисты такие, которые могут перекодировать)) не очень то и просто наверное перевести с одного языка на другой(
да ладно-ка, бред)))

вот код, удаления, к сожалению, нет, но его можно с моей лабы, что я выложила выше, взять

Pascal
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
Program Lab11;
Uses Crt;
Type
 
  str10 = string[10];
  str3 = string[3];
 
  ref = ^node;
 
  node = record
          name : str10;
          left, right : ref;
          age : str3;
         end;
 
 
Var
  root, root2 : ref;
  fin, fin2 : text;
 
  name1 : str10;
  age1 : str3;
 
Procedure Prebuild (var f : text; var root : ref);
Var
  p : ref;
  s : str10;
  v : str3;
Begin
  Read (f, s);
  Read (f, v);
 
  if s = '*         ' then
   Root := nil
  else
   begin
    new(p);
    With p^ do
     Begin
      name := s;
      age := v;
      Prebuild (f, left);
      Prebuild (f, right);
     end;
    Root := p;
   end;
end;
 
{ARB}
Procedure PrintTree (t : ref; h : integer);
Var i : integer;
Begin
  if t <> nil then
   with t^ do
    begin
     PrintTree (left, h+5);
     for i := 1 to h do
      Write(' ');
     Writeln(name, age);
     PrintTree (right, h+5);
    end;
end;
 
Procedure AddWord (var t : ref; name1 : str10; age1 : str3);
Begin
 if t = nil then
  Begin
   new(t);
   with t^ do
    Begin
     age := age1;
     name := name1;
     left := nil;
     right := nil;
    end;
  end
 else
  if t^.age >= age1 then
   AddWord (t^.right, name1, age1)
  else
   AddWord (t^.left, name1, age1);
end;
 
Begin
 
 ClrScr;
 
 Assign (fin2, 'fin_bst.txt');
 Reset(fin2);
 Prebuild (fin2, root2);
 
 WriteLn;
 
 PrintTree (root2, 0);
 
 ReadLn(name1);
 
 ReadLn(age1);
 
 AddWord (root2, name1, age1);
 
 PrintTree (root2, 0);
 
 Repeat until keypressed;
 
end.
1
 Аватар для XudaH
13 / 13 / 0
Регистрация: 04.05.2009
Сообщений: 130
26.04.2011, 21:31  [ТС]
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
180
181
182
183
#include <vcl.h>
#include <iostream>
#include <string>
#pragma hdrstop
 
//---------------------------------------------------------------------------
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;
}
#pragma argsused
 
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;
}
Вот кое какой код нарыл, вроде работает, но там нету поддеревьев. И когда добавляешь одинковый элемент, то выдает ошибку(( Если кто нибудь доработал его, было бы вообще замечательно ;-)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.04.2011, 21:31
Помогаю со студенческими работами здесь

Описать класс, реализующий бинарное дерево
Описать класс, реализующий бинарное дерево, которое обладает возможностью добавления новых элементов, удаления существующих, поиска...

Описать класс, что реализует бинарное дерево
Доброго времени суток. Может кто-то поделиться готовым кодом или примером для такого задания: Описать класс, что реализует бинарное...

Описать класс реализующий бинарное дерево c добавлением, удалением и поиском
Описать класс, реализующий бинарное дерево, обладающее возможностью добавления новых элементов, удаления существующих, поиска элемента по...

Описать класс дерево, содержащий сведения о названии, высоте и возрасте дерева
Описать класс дерево, содержащий сведения о названии, высоте и возрасте дерева. Предусмотреть инициализацию полей с проверкой допустимости...

Описать класс, реализующий бинарное дерево c возможностью добавления и удаления элементов
Описать класс, реализующий бинарное дерево, обладающее возможностью добав- ления новых элементов, удаления существующих, поиска элемента...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru