Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
11 / 11 / 5
Регистрация: 01.04.2015
Сообщений: 120
1

Бесконечный цикл при работе с бинарным деревом

16.07.2015, 21:06. Показов 536. Ответов 1
Метки нет (Все метки)

Добрый вечер. Помогите разобраться на третьем обьекте в бинарном дереве ухожу в бесконечный цикл. Где я допустил ошибку ?

Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <iomanip>
#include <time.h>
#include <string>
 
using namespace std;
 
class Node
{
public:
    Node* m_Left;
    Node* m_Rigth;
    Node* m_Parent;
 
    string  m_NumberAuto;// номер авто 
    string* m_CardOfense;// массив нарушений 
    int m_Count;// счетчик нарушений 
 
    Node()
    {
        m_Left = m_Rigth = m_Parent = nullptr;
        m_CardOfense = nullptr;
        m_NumberAuto = "";
    }
 
    Node* Add(int count, string* car_numbers, string* fouls)
    {
        srand(time(NULL));
 
        m_CardOfense = new string[count];// выделяю память под массив нарушений
        for (int  i = 0; i < count; i++)
        {
            m_CardOfense[i] = fouls[0 + rand() % 15];// рандомно берется нарушение
        }
        m_Count = count;
        m_NumberAuto = car_numbers[0 + rand() % 10];// рандомный номер автомобиля.
        return this;
    }
 
    void Print()
    {
        cout << " Номер нарушителя: " << m_NumberAuto << endl;
        cout << " Список правноарушений: " << endl;
        for (int i = 0; i < m_Count; i++)
        {
            cout << m_CardOfense[i] << endl;
        }
    }
 
    ~Node()
    {
        delete[] m_CardOfense;
    }
};
 
class Tree
{
public:
    Node* m_Root;
 
    Tree()
    {
        m_Root = nullptr;
    }
    void Print(Node* node)
    {
        if (node->m_Left != nullptr)
        {
            Print(node->m_Left);// рекурсивно обхожу ветки печати 
        }
        node->Print();
        if (node->m_Rigth != nullptr)
        {
            Print(node->m_Rigth);
        }
    }
    void Add(Node* newelem)
    {
        if (m_Root == nullptr)
        {
            m_Root = newelem;
        }
        else
        {
            Node* temp = m_Root;
            Node* m_Parent = m_Root;
            for (;;)
            {
                if (newelem->m_NumberAuto > temp->m_NumberAuto)
                {
                    temp = temp->m_Rigth;
                }
                else
                {
                    temp = temp->m_Left;
                }
                if (temp != nullptr)
                {
                    m_Parent = temp;
                }
                else
                {
                    if (newelem->m_NumberAuto > m_Parent->m_NumberAuto)
                    {
                        m_Parent->m_Rigth = newelem;
                        newelem->m_Parent = m_Parent;
                    }
                    else
                    {
                        m_Parent->m_Left = newelem;
                        newelem->m_Parent = m_Parent;
                    }
                    break;
                }
            }
        }
    }
 
};
 
void main()
{
    setlocale(LC_CTYPE, "Russian");
    system("mode con cols=110 lines=50");
 
    string car_numbers[] = { "BB0552CM", "AH9913ET", "AH0717HC", "AE5437IH", "AI1233AB", "AA3258AE", "AE5533AI", "BC0785AT", "BK1133BE", "AE0707KI" };
    string fouls[] = {
        "Управление ТС, не зарегистрированным в установленном порядке",
        "Управление ТС водителем, лишенным права управления ТС",
        "Управление ТС водителем, находящимся в состоянии опьянения",
        "Превышение установленной скорости движения ТС на величину более 20, но не более 40 километров в час",
        "Превышение установленной скорости движения ТС на величину более 40, но не более 60 километров в час",
        "Превышение установленной скорости движения ТС на величину более 60 километров в час",
        "Нарушение правил проезда через железнодорожные переезды",
        "Невыполнение требования ПДД уступить дорогу ТС, пользующемуся преимущественным правом проезда перекрестков",
        "Движение по велосипедным или пешеходным дорожкам либо тротуарам в нарушение ПДД",
        "Движение во встречном направлении по дороге с односторонним движением",
        "Несоблюдение требований, предписанных дорожными знаками или разметкой проезжей части дороги",
        "Нарушение правил пользования внешними световыми приборами, звуковыми сигналами, аварийной сигнализацией или знаком аварийной остановки",
        "Нарушение правил перевозки грузов, а равно правил буксировки",
        "Невыполнение законного требования сотрудника полиции об остановке ТС",
        "Оставление водителем в нарушение ПДД места дорожно-транспортного происшествия, участником которого он являлся"
    };
 
    Node Object;
    Node Object1;
    Tree tree;
 
    // это тестировалось работоспособность на самом деле тут менюха будет 
 
    Object.Add(5, car_numbers, fouls);
    Object.Print();
    tree.Add(&Object);
 
    cout << endl;
    Object.Add(1, car_numbers, fouls);
    Object.Print();
    tree.Add(&Object);
 
    cout << endl;
    Object.Add(2, car_numbers, fouls);
    Object.Print();
    tree.Add(&Object);
 
    tree.Add(&Object);
    cout << endl << endl;
 
    tree.Print(&Object);
 
 
 
    system("pause");
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.07.2015, 21:06
Ответы с готовыми решениями:

Проблемка при работе с бинарным файлом
Q живым.Есть проблема при работе с бинарным файлом.В файле 1.dat пытался разместить 10 чисел,но...

Сортировка бинарным деревом
Помогите реализовать сортировку массива бинарным деревом, перепробовал много вариантов, не работает.

Сортировка бинарным деревом
Получить число n на ввод; сделать сортировку бинарным деревом и построить дерево графически

Сортировка бинарным деревом
Нужно отсортировать массив бинарным деревом. Дерево создано, элементы массива в него засунуты....

1
2733 / 1892 / 564
Регистрация: 05.06.2014
Сообщений: 5,525
17.07.2015, 08:40 2
Ошибка, видимо, в том, что третьего объекта нет в природе. Вы четыре раза подряд пытаетесь запихать в дерево один и тот же Object.
К слову говоря, {} вокруг блока кода на одну строчку не нужно.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.07.2015, 08:40

Работа с бинарным деревом
Помогите пожалуйсто переделать две последнии функции без использования высших функций import...

Сортировка бинарным деревом
Подсмотрел я тут методы и подумал - а почему бы не написать на VBA сорировку методом бинарного...

Сортировка бинарным деревом
Помогите написать программу (решение задачи): Выпустили лотерейные билеты с четырехзначными...

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru