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

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

Войти
Регистрация
Восстановить пароль
 
vab9petryk
 Аватар для vab9petryk
2 / 2 / 0
Регистрация: 28.09.2013
Сообщений: 218
#1

Построение бинарного дерева. Где ошибка? - C++

24.05.2014, 23:36. Просмотров 629. Ответов 5
Метки нет (Все метки)

Насколько понял, tree->left, tree->right указывает на NULL. Почему, не могу разобратся.
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
#include <iostream>
#include <ctime>
using namespace std;
struct node {
       char letter;
       node *left, *right;
}*tree = NULL;
 
node *add_tree (int n){
     node *ptr, *root = new node;
     root->left = root->right = NULL;
     cout<<"Vvedite ";
     cin>>root->letter;
     srand (time(NULL));
     while (n > 0){
           ptr = root;
           while (ptr){
                 if (rand()%10<5) ptr = ptr->left;
                 else ptr = ptr->right;
                 }
           ptr = new node;
           ptr->left = ptr->right = NULL;
           cout<<"Vvedite znach ";
           cin>>ptr->letter;
           n--;
           }
     return root;
     }
     
void vyvod(node *ptr, int l){
  int i;
  if (ptr) {
    vyvod(ptr->right, l+1);
    for (i=0; i< l; i++) cout << "    ";
    cout<<ptr->letter;
    vyvod(ptr->left, l+1);
  }
  else cout << endl;
}
 
int main(){
    tree = add_tree (4);
    vyvod (tree, 1);
    system("pause");
    return 0;
    }
Добавлено через 10 часов 20 минут
upd
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.05.2014, 23:36     Построение бинарного дерева. Где ошибка?
Посмотрите здесь:

Построение бинарного дерева из двумерного массива C++
Построение бинарного дерева C++
Запись бинарного дерева в файл и восстановление из него этого дерева C++
C++ Построение бинарного дерева на основе не бинарного
Построение бинарного дерева из строки C++
Построение бинарного дерева C++
C++ Вывод бинарного дерева на экран в виде "дерева"
не листовые вершины бинарного дерева, где находятся? C++
C++ Код Хаффмана реализованный через построение бинарного дерева
Написать шаблон бинарного дерева с функцией распечатки дерева C++
Ошибка при реализации бинарного дерева: error C1075: конец файла обнаружен ранее, чем левая фигурная скобка C++
C++ Реализация бинарного дерева С++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Хедин
 Аватар для Хедин
73 / 68 / 36
Регистрация: 17.05.2014
Сообщений: 301
24.05.2014, 23:56     Построение бинарного дерева. Где ошибка? #2
vab9petryk, а где конкретно вылетает? На каком этапе?
vab9petryk
 Аватар для vab9petryk
2 / 2 / 0
Регистрация: 28.09.2013
Сообщений: 218
25.05.2014, 01:05  [ТС]     Построение бинарного дерева. Где ошибка? #3
Хедин, да оно не вылетает, оно все работает. Но вот когда пытаюсь вывести значения дерева через функцию vyvod, то выводится только корень дерева. Отсюда и понял, что корень->лефт и корень->райгт указывают на НУЛЛ. Почему, не могу понять. Ведь в функции построения дерева вроде бы выделяю для них память
Вованя
122 / 122 / 47
Регистрация: 20.02.2014
Сообщений: 431
25.05.2014, 06:08     Построение бинарного дерева. Где ошибка? #4
C++
1
2
3
4
5
6
while (ptr){
  if (rand()%10<5) ptr = ptr->left;
     else ptr = ptr->right;
   }
   ptr = new node; // потому, что здесь адрес ты присваиваешь не правому\левому указателю, а локальной переменной, которая при выходе из цикла уничтожится.
  ptr->left = ptr->right = NULL;
Сама по себе структура дерева немного странная.
vab9petryk
 Аватар для vab9petryk
2 / 2 / 0
Регистрация: 28.09.2013
Сообщений: 218
25.05.2014, 13:03  [ТС]     Построение бинарного дерева. Где ошибка? #5
Вованя, а, догнал, я присваиваю переменной, по сути, то, на что указывает ptr->right, ptr->left, а они указывают на NULL. После этого я выделяю память для этой переменной, но не для кореня. Только вот как бы это исправить.
Вованя
122 / 122 / 47
Регистрация: 20.02.2014
Сообщений: 431
25.05.2014, 14:06     Построение бинарного дерева. Где ошибка? #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от vab9petryk Посмотреть сообщение
Только вот как бы это исправить.
Попробуй так
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
while (n > 0)
{
    ptr = root;
    while (ptr)
    {
        if (rand()%10<5) 
        {
            if(ptr->left)
                ptr = ptr->left;
            else 
            {
                ptr->left = new node;
                ptr->left->left = ptr->left->right = 0;
                cout << "Vvedite znach ";
                cin >> ptr->left->letter;
                                break;
            }
        }
        else
        {
            if(ptr->right)
                ptr = ptr->right;
            else 
            {
                ptr->right = new node;
                ptr->right->left = ptr->right->right = 0;
                cout << "Vvedite znach ";
                cin << ptr->right->letter;
                                break;
            }
        }
    }
    n--;
}
Yandex
Объявления
25.05.2014, 14:06     Построение бинарного дерева. Где ошибка?
Ответ Создать тему
Опции темы

Текущее время: 02:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru