0 / 0 / 1
Регистрация: 31.10.2017
Сообщений: 5
1

Ошибка в выводе Бинарного дерева

31.10.2017, 21:21. Показов 401. Ответов 5
Метки нет (Все метки)

В бинарном дереве выдается корявый вывод: элементы, которые идут в правом листе в начале пишется также "l", что меняет ее уровень, как будто он так запоминает и пишет опять L
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
#include <iostream>
#include <cstdlib>
 
using namespace std;
 
struct Node // создаем структуру левый правый ребенок(число) 
{
    int number;
    Node* leftChild = 0;
    Node* rightChild = 0;
};
 
void insert(Node* root, int number) 
{
    if(number >= root->number)
    {
        if(root->rightChild)
        {
            insert(root->rightChild, number);
        }
        else
        {
            root->rightChild = new Node;
            root->rightChild->number = number;
        }
    }
    else
    {
        if(root->leftChild)
        {
            insert(root->leftChild, number);
        }
        else
        {
            root->leftChild = new Node;
            root->leftChild->number = number;
        }
    }
}
 
void showTree(Node* root, string str)
{
    cout << str << root->number << endl;
    //str += "=>";
    
    if(root->leftChild)
    {
        showTree(root->leftChild, str += "l");
        //str += "<=";
    }
    
 
    if(root->rightChild)
    {
        showTree(root->rightChild, str += "r");
        //str += "=>";
    }
}
 
int main()
{
    setlocale(LC_ALL, "russian");
    
    int n;
    
    cout << "Введите количество чисел: ";
    cin >> n;
    
    int mass[n]; //создаем массив 
    
    cout << "Вводите элементы" << endl;
    
    for(int i = 0; i < n; i++)  //считывание и заполнение массива
    {
        cin >> mass[i];
    }
    
    Node* root = new Node;  // объявяем структуру 
    root->number = mass[0]; // обращение к члену структуры
    
    for(int i = 1; i < n; i++)  //заполнение 
    {
        insert(root, mass[i]);
    }
    
    cout << endl;
    showTree(root, "");     //вывод
    cout << endl;
    
    system("pause");
    return 0;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.10.2017, 21:21
Ответы с готовыми решениями:

Ошибка при выводе содержимого бинарного файла
#include &quot;stdafx.h&quot; #include &quot;windows.h&quot; #include &lt;iostream&gt; #include &lt;fstream&gt; using...

Ошибка при выводе дерева
#include &lt;iostream&gt; using namespace std; struct node { int inf; node *left; ...

Построение бинарного дерева. Где ошибка?
Насколько понял, tree-&gt;left, tree-&gt;right указывает на NULL. Почему, не могу разобратся. #include...

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

5
3656 / 2843 / 781
Регистрация: 25.03.2012
Сообщений: 10,432
Записей в блоге: 1
31.10.2017, 22:11 2
напиши пример красивого вывода, который ты ожидаешь?
что-то типа такого что ли?
Код
.......8..........
...4........12....
.2...6...10....14.
1.3.5.7.9.11.13.15
0
0 / 0 / 1
Регистрация: 31.10.2017
Сообщений: 5
01.11.2017, 12:42  [ТС] 3
Нет же, если ввести небольшой набор чисел и посмотреть.на вввод, в левом поддереве все прописано поавилтно, а начиная с пкрвого уровня правого-там как.бы.наследуется метка l на каждом уровне правого.дерева, и толтко.потом пишетсч правое
0
3656 / 2843 / 781
Регистрация: 25.03.2012
Сообщений: 10,432
Записей в блоге: 1
01.11.2017, 12:45 4
beawin54, ну и что? В этом весь смысл вывода! Ты пишешь все повороты на развилках на пути к этому листу. "лево-лево-право"
0
0 / 0 / 1
Регистрация: 31.10.2017
Сообщений: 5
01.11.2017, 14:48  [ТС] 5
Должно быть как то так
Миниатюры
Ошибка в выводе Бинарного дерева  
0
3656 / 2843 / 781
Регистрация: 25.03.2012
Сообщений: 10,432
Записей в блоге: 1
01.11.2017, 15:03 6
C++
1
2
3
4
5
6
7
8
9
10
    if (root->leftChild)
    {
        showTree(root->leftChild, str + "l");
        //str += "<=";
    }
    if (root->rightChild)
    {
        showTree(root->rightChild, str + "r");
        //str += "=>";
    }
Добавлено через 1 минуту
+= не нужно

Добавлено через 3 минуты
на будущее, есть замечательная штуки Breakpoint, StepOver и watch
Ставите breakpoint на нужную строчку программы
Пишите в окошко Watch переменную, которая у вас почему-то неправильная
и по очереди строчка за строчкой проходите по программе кнопкой СтепОуэр, ожидая найти ту строчку, в которой переменная портится.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.11.2017, 15:03

Написать шаблон бинарного дерева с функцией распечатки дерева
Не понимаю, что от меня хотят. Дано такое задание: Написать шаблон бинарного дерева с функцией...

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

Создание бинарного дерева из бинарного файла
struct Bin { string name; string city; int players; int score; }; void...

Ошибка при реализации бинарного дерева: error C1075: конец файла обнаружен ранее, чем левая фигурная скобка
Почему выскакивает ошибка? Вроде все правильно. error C1075: конец файла обнаружен ранее, чем...

Ошибка при выводе бинарного файла
Добрый день! Ошибка вот в чем: при сортировке массива, в одну ячейку StringGrid вставляет две...

Ошибка при создании бинарного дерева
Ошибка: Error 1 'treeParentChild.Program.CategoryCollection' does not implement interface member...


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

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

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