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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Приложение запрашивающее разрешение на выход http://www.cyberforum.ru/cpp-beginners/thread1119605.html
Создайте приложение, которое перед своим закрытием, вне зависимости от способа, которым оно осуществляется, запрашивает у пользователя подтверждение и завершает работу только при положительном ответе. ну в общем вот текст задания. создал 2 формы при выходе с 1 появляется 2 форма, но тут же программа завершается. как установить паузу на закрытие?
C++ Ввод элементов массива в цикле помогите ...нужно написать программу по заданию на картинке 3 вариант отмечен http://www.cyberforum.ru/cpp-beginners/thread1119567.html
C++ Дана строка символов. Заменить в ней все пробелы на табуляции
Здравствуйте! Ребят, помогите решить следующие задачи : Тема: Обработка строк 1)Дана строка символов. Заменить в ней все пробелы на табуляции. 2)Дана строка символов. Определить количество букв, количество цифр и количество остальных символов, присутствующих в строке. 3)Создать функцию для проверки корректности расстановки скобок в выражении. 4)Написать функцию, которая определяет...
Возможно ли это заменить циклом? C++
Здравствуйте! Подскажите, как этот фрагмент, можно заменить циклом? ... cout << "Введите количество часов: "; cin >> hours1 >> hours2 >> hours3; cout << "1" << hours1 << calculateCharges(hours1) << endl; cout << "2" << hours2 << calculateCharges(hours2) << endl; cout << "3" << hours3 << calculateCharges(hours3) << endl; ...
C++ А.Александреску - Современное проектирование на C++ http://www.cyberforum.ru/cpp-beginners/thread1119542.html
Собственно вопрос не совсем по программированию :) Хочу купить бумажный вариант, но смущает, что она 2008 года и в шаблонах используется enum {}, например, вместо constexpr и все такое. Может кто-нибудь слышал, будет ли переиздание книги с учетом С++11/14 ? Если будет, то я уж подожду с покупкой.
C++ Генератор случайных чисел (double) Товарищи,перерыл весь интернет и учебники и не могу понять,что не так в моем коде. У меня задача: сделать матрицу случайных вещественных чисел,меньших 1. На остальное не смотрите,там все норм Может,как вариант с printf'ом начудил(так как там выводит только целые числа),пробовал и по-другому НИФИГА По этому,вы -последняя надежда#include "stdafx.h" #include <iostream> #include <cstdlib>... подробнее

Показать сообщение отдельно
kupnu4
26 / 26 / 9
Регистрация: 03.05.2013
Сообщений: 71
16.03.2014, 00:38     Бинарное дерево
наверняка можно сделать аккуратнее и компактнее(например с помощью рекурсий, но я их не уважаю - слишком уж они прожорливы на мой взгляд). это заголовочный файл binary_tree.h (вроде рабочий):

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
template <class T>
class binary_tree
{
    struct Node
    {
        T value;
        Node* pLess;
        Node* pLarger;
    }* firstNode;
    binary_tree(void);
    bool isLast(const Node* _node)
    {
        return (_node->pLess==NULL)&&(_node->pLarger==NULL);
    };
public:
    binary_tree(const T _value)
    {
        firstNode = new Node;
        firstNode->value = _value;
        firstNode->pLess = NULL;
        firstNode->pLarger = NULL;
    };
    bool addNode(const T _value)
    {
        Node* current = new Node;
        current = firstNode;
        do
        {
            if(current->value==_value)
                return false;
            if(_value<current->value)
                if(current->pLess)
                    current = current->pLess;
                else
                {
                    Node* newNode = new Node;
                    newNode->value = _value;
                    newNode->pLess = NULL;
                    newNode->pLarger = NULL;
                    current->pLess = newNode;
                    break;
                }
            else
                if(current->pLarger)
                    current = current->pLarger;
                else
                {
                    Node* newNode = new Node;
                    newNode->value = _value;
                    newNode->pLess = NULL;
                    newNode->pLarger = NULL;
                    current->pLarger = newNode;
                    break;
                }
        }
        while(current!=NULL);
        return true;
    };
    bool deleteNode(const T _value)
    {
        Node* buf = new Node;
        Node* current = new Node;
        current = firstNode;
        while(current->value!=_value&&!isLast(current))
        {
            buf = current;
            if(current->value>_value)
                current=current->pLess;
            else
                current=current->pLarger;
        }
        if(isLast(current)&&current->value!=_value)
            return false;
        if(isLast(current))
        {
            delete current;
            if(buf->pLess==current)
                buf->pLess = NULL;
            else
                buf->pLarger = NULL;
            return true;
        }
        if(current->pLess&&current->pLarger)
        {
            if(!current->pLarger->pLess)
            {
                current->pLarger->pLess = current->pLess;
                if(buf->pLess==current)
                    buf->pLess = current->pLarger;
                else
                    buf->pLarger = current->pLarger;
            }
            else
            {
                Node* n = new Node;
                n = current->pLarger->pLess;
                while(n->pLess)
                    n=n->pLess;
                n->pLess = current->pLess;
            }
            delete current;
            return true;
        }
        if(current->pLess||current->pLarger)
        {
            if(buf->pLess==current)
                buf->pLess = (current->pLess)?current->pLess:current->pLarger;
            else
                buf->pLarger = (current->pLess)?current->pLess:current->pLarger;
            delete current;
            return true;
        }
        return true;
    };
 
    int find(const T& _value)
    {
        int steps = 0;
        Node* current = new Node;
        current = firstNode;
        while(current->value!=_value&&!isLast(current))
        {
            if(current->value>_value)
                current=current->pLess;
            else
                current=current->pLarger;
            steps++;
        }
        if(isLast(current)&&current->value!=_value)
        {
            return -1;
        }
        return steps;
    };
 
    ~binary_tree(void)
    {
        Node* current = new Node;
        Node* buf = new Node;
        buf = current = firstNode;
        while(!isLast(firstNode))
        {
            current = firstNode;
            
            while(!isLast(current))
            {
                buf = current;
                if(current->pLess)
                {
                    current = current->pLess;
                    if(isLast(current))
                        buf->pLess = NULL;
                }
                else
                    if(current->pLarger)
                    {
                        current = current->pLarger;
                        if(isLast(current))
                            buf->pLarger = NULL;
                    }
            }
            delete current;
        }
        delete firstNode;
    };
};
 
Текущее время: 15:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru