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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Обработка нажатия/отжатия кнопки на WinApi! http://www.cyberforum.ru/cpp-beginners/thread554674.html
Подскажите хоть каким образом отловить команду нажатия или отжатия клавиши! Как например с клавиатурой WM_KEYDOWN/WM_KEYUP! Добавлено через 4 часа 16 минут Ааааауууууууууууууууууууу!
C++ Задача на классы! В классах совсем не разбираюсь. Прошу помощи Выберите 10 произвольных букв русского алфавита (введите с клавиатуры). Введите произвольное русское слово. С помощью ключа длиной от трех до восьми символов, также вводимого пользователем с клавиатуры, произведите шифровку слова в числовую комбинацию, как показано в следующем примере. Пример: Пусть задан набор русских букв Поставим им в соответствие цифры от 0 до 9: В Е Ж М Н О П Р С Т 0... http://www.cyberforum.ru/cpp-beginners/thread554661.html
C++ Табуляция
#include <iostream> using namespace std; void main() { setlocale(LC_ALL, "rus"); int numb ; cout << "Введите 9 чисел с разными знаками (+ или -) \n"; for (int i = 0; i < 9; i++) { cin >> numb;
Не могу подсчитать сумма чётных элементов массива C++
#include "stdafx.h" #include<stdio.h> #include<math.h> #include<conio.h> #include <stdlib.h> void fmas(float q, int n, float a, float b, float c, float *pt_sum, int *pt_kx) { int i,kx=0; float sx=0; for(i=0;i<n;i++)
C++ Система для решений уравнений методом простых итераций. http://www.cyberforum.ru/cpp-beginners/thread554633.html
День добрый. Образовалась проблема. Я пропустил почти весь 2 семестр по болезни и теперь висит задача в виде курсового проекта на тему в топике. Лично я как не старался, ничего не мог сделать. Наброски: #include <iostream.h> //çàãîëîâî÷íèé ôàéë ââîäó-âèâîäó. #include <math.h> //çàãîëîâî÷íèé ôàéë äëÿ ìàòåìàòè÷íèõ ðîçðàõóíê³â.
C++ Разработать шаблон класса для работы с двунаправленным некольцевым списком Помогите новичку дорешать задачу: Задание: Разработать шаблон класса для работы с двунаправленным некольцевым списком. Реализовать следующие действия добавление звена в начало списка; удаление звена из начала списка; добавление звена в произвольное место списка, отличное от начала (например, после звена, указатель на которое задан); удаление звена из произвольного места списка,... подробнее

Показать сообщение отдельно
inek
0 / 0 / 0
Регистрация: 09.04.2012
Сообщений: 11
21.04.2012, 22:23     Шаблон класса для работы с двоичным деревом поиска
помогите новичку с задачей разобраться до конца. пример

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

Задача:
Написать программу, которая находит в заданном непустом бинарном дереве длину (количество ветвей) пути от корня до ближайшей вершины с заданным элементом 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;
}
Помогите реализовать задачу.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 08:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru