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

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

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

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

24.05.2014, 23:36. Просмотров 668. Ответов 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
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.05.2014, 23:36
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Построение бинарного дерева. Где ошибка? (C++):

Построение бинарного дерева на основе не бинарного - C++
В лабораторной работе есть такое задание: Создайте процедуру построения бинарного дерева на основе не бинарного. Объясните как вообще...

Построение бинарного дерева - C++
Доброй ночи! Пятые сутки не могу разобрать реализацию алгоритма на С++ Console Wizzard! Что такое бинарное дерево я знаю, даже разобрал...

Построение бинарного дерева - C++
Написать программу построения бинарного дерева с помощью связных структур и поиска в дереве при симметричном порядке обхода его. Если...

Построение бинарного дерева из строки - C++
Доброго времени суток, уважаемые. Хотел бы спросить у вас спросить совета относительно реализации следующей проблемы: Задано...

Построение бинарного дерева из двумерного массива - C++
Стыдно, если честно, об этом просить, но &quot;возник стопор&quot; и путных идей не приходит. Суть задачи: Есть массив n*n состоящий из целых...

Код Хаффмана реализованный через построение бинарного дерева - C++
Здравствуйте, есть код Хаффмана реализованный через построение бинарного дерева, узлами которого является элемент типа map ,либо символ и...

5
Хедин
73 / 68 / 36
Регистрация: 17.05.2014
Сообщений: 301
24.05.2014, 23:56 #2
vab9petryk, а где конкретно вылетает? На каком этапе?
0
vab9petryk
2 / 2 / 0
Регистрация: 28.09.2013
Сообщений: 223
25.05.2014, 01:05  [ТС] #3
Хедин, да оно не вылетает, оно все работает. Но вот когда пытаюсь вывести значения дерева через функцию vyvod, то выводится только корень дерева. Отсюда и понял, что корень->лефт и корень->райгт указывают на НУЛЛ. Почему, не могу понять. Ведь в функции построения дерева вроде бы выделяю для них память
0
Вованя
126 / 134 / 48
Регистрация: 20.02.2014
Сообщений: 468
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;
Сама по себе структура дерева немного странная.
0
vab9petryk
2 / 2 / 0
Регистрация: 28.09.2013
Сообщений: 223
25.05.2014, 13:03  [ТС] #5
Вованя, а, догнал, я присваиваю переменной, по сути, то, на что указывает ptr->right, ptr->left, а они указывают на NULL. После этого я выделяю память для этой переменной, но не для кореня. Только вот как бы это исправить.
0
Вованя
126 / 134 / 48
Регистрация: 20.02.2014
Сообщений: 468
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--;
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.05.2014, 14:06
Привет! Вот еще темы с ответами:

не листовые вершины бинарного дерева, где находятся? - C++
этими вершинами не являются ли сами листья дерева?

Запись бинарного дерева в файл и восстановление из него этого дерева - C++
Задача такая: есть бинарное дерево. Каждый элемент дерева содержит 3 указателя - 1 указатель на структуру с данными, 2 и 3й указатель на...

Написать шаблон бинарного дерева с функцией распечатки дерева - C++
Не понимаю, что от меня хотят. Дано такое задание: Написать шаблон бинарного дерева с функцией распечатки дерева *(+(d,e),c) в виде...

Создание бинарного дерева из бинарного файла - C++
struct Bin { string name; string city; int players; int score; }; void ReadFromBin(Point*&amp; Tree) { Bin q;


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

Или воспользуйтесь поиском по форуму:
6
Yandex
Объявления
25.05.2014, 14:06
Ответ Создать тему
Опции темы

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