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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.92
inek
0 / 0 / 0
Регистрация: 09.04.2012
Сообщений: 11
#1

Шаблон класса для работы с двоичным деревом поиска - C++

21.04.2012, 22:23. Просмотров 1533. Ответов 0
Метки нет (Все метки)

помогите новичку с задачей разобраться до конца. пример

Задание:
Разработать шаблон класса для работы с двоичным деревом поиска. Реализовать следующие действия
добавление элемента в дерево;
удаление элемента из дерева;
обход дерева (для печати элементов и т.д.);
поиск в дереве.
Протестировать шаблон класса на следующих типах данных: целые, вещественные, символьные, строки.

Задача:
Написать программу, которая находит в заданном непустом бинарном дереве длину (количество ветвей) пути от корня до ближайшей вершины с заданным элементом E.

Шаблон класса с некоторыми необходимыми методами есть:
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
#include <cstdlib>
#include <iostream>
#include <ctime>
#include <string>
 
using namespace std;
 
template <typename T>
class BTree
{
    struct Node
    {
        T data;
        Node *L, *R;
        Node(T d, Node *left = 0, Node *right = 0):data(d), L(left), R(right) {}
    };
    Node *root;
    void insRec(Node* &r, T d)
    {
        if (!r)
           r = new Node(d,0,0);
        else
           if(d < r->data)
                insRec(r->L, d);
           else
                insRec(r->R, d);
    }
    void printRec(Node* r)
    {
        if (r) 
        {
            printRec(r->L); 
            cout << r->data << " "; 
            printRec(r->R);
        }
    }
    void removeDuplicateRec(Node* r, T val, bool flag = false)
    {
        if (r) 
        {
            removeDuplicateRec(r->L, val, flag); 
            if (val == r->data && flag)
               delRec(root, r->data);
            removeDuplicateRec(r->R, r->data, true);
        }
         
    }
    
    void delRec(Node* &r, T d)
    {
        Node *P, *v;
        if (!r) 
            cout << "Element '"<< d <<"' not found..." << endl;
        else
            if (d < r->data) 
                delRec(r->L, d);
            else 
                if (d > r->data) 
                    delRec(r->R, d);
                else 
                    {
                        P = r;
                        if (!r->R) 
                            r = r->L;
                        else 
                            if (!r->L) 
                                r = r->R;
                            else
                                {
                                    v = r->L;
                                    if (v->R)
                                    {
                                         while (v->R->R) v = v->R; 
                                         r->data = v->R->data;
                                         P = v->R; 
                                         v->R = v->R->L;
                                    }
                                    else
                                    {
                                         r->data = v->data;
                                         P = v;
                                         r->L=r->L->L;
                                    }
                                }
                        delete P;
                    }
    }
    
    bool findRec(Node* r, T d)
    {
       if (!r) 
          return false;
       else 
          if (d == r->data) 
             return true;
          else 
             if (d < r->data) 
                return findRec(r->L, d);
             else 
                return findRec(r->R, d);    
    }
public:
    BTree(Node *r = 0):root(r){}
    ~BTree();
    void addChild(T d);
    void del(T d);
    void print();
    bool find(T d);
    void removeDuplicate();
};
 
template <typename T>
void BTree<T>::removeDuplicate() 
{ 
    removeDuplicateRec(root, root->data);   
}
 
template <typename T>
void BTree<T>::addChild(T d) 
{ 
    insRec(root, d);    
}
 
template <typename T>
void BTree<T>::del(T d) 
{ 
    delRec(root, d);    
}
 
template <typename T>
void BTree<T>::print()
{
    printRec(root);
    cout << endl;
}
 
template <typename T>
bool BTree<T>::find(T d)
{
    return findRec(root, d);
}
 
int main()
{
    int n;
    int a;
    BTree<int> *T = new BTree<int>();
    cout << "Enter N: ";
    cin >> n;
    while (--n > -1)
    {     cin >> a;
          T->addChild(a);
    }
    T->print();
    T->removeDuplicate();
    T->print();
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
Помогите реализовать задачу.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.04.2012, 22:23
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Шаблон класса для работы с двоичным деревом поиска (C++):

Шаблон класса для работы с массивом - C++
помогите пожалуйста! Нужно создать шаблон класса для работы с одномерным массивом. Выполнить тестирование путем создания и обработки...

Шаблон класса для работы с комплексными числами - C++
Есть такая программа: #include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; template&lt; class T &gt; class Complex; ...

Шаблон класса для работы с одномерным массивом - C++
Создать шаблон класса для работы с одномерным массивом. Выполнить тестирование путем создания и обработки массивов, со- ...

Разработать шаблон класса для работы со стеком реализованным в виде связного списка - C++
Разработать шаблон класса для работы со стеком реализованным в виде связного списка. Тип эле-ментов задается как параметр шаблона. Написать...

Задачу с использованием STL. Разработать шаблон класса для работы с односвязным списком - C++
Решить задачу с использованием STL. Разработать шаблон класса для работы с односвязным списком. Тип элементов задается как параметр...

Шаблоны функций, Ошибка: для использования класса шаблон требуется список аргументов шаблон - C++
Есть у меня 3 структуры Трамвай , Троллейбус , Автобус. Для автобуса определены функции (работают) Троллейбус и Трамвай одинаковые поля...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.04.2012, 22:23
Привет! Вот еще темы с ответами:

Как привязать Шаблон к main() для поиска k-ой статистики - C++
//дан массив mas длины n. Найти k-ую по величине порядковую статистику //основная идея - использовать алгоритм быстрой сортировки ...

Написать шаблон функции для поиска среднего арифметического массива - C++
Написать шаблон функции для поиска среднего арифметического значений массива

Написать шаблон функции для поиска среднего арифметического значений массива - C++
Кто знает как решить задачу на С++, при помощи шаблонов функций? Написать шаблон функции для поиска среднего арифметического значений ...

Шаблон функции для поиска произведения всех элементов одномерного массива - C++
Есть задание: /* Создать функцию-шаблон. Используя эту функцию, проверить её для разных типов параметров (int, double, float). ...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru