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

Бинарное дерево. Случайные числа

07.09.2019, 16:56. Показов 1236. Ответов 0

Пытаюсь сделать бинарное дерево. Не получается написать функцию для генерации случайных чисел для дерева ( см. в int main() )
Должно получится подобное
Бинарное дерево. Случайные числа

Моя корявая функция случайных чисел печатает:

365 0 1 2 3 4 5 6 7 8 9

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
#include <iostream>
#include <cstdlib> // для функций rand() и srand()
using namespace std;
 
struct Node //Звено дерева
{
    int x;       //То, что записываем в дерево
    Node *l, *r; //Это указатели, ссылки на новые звенья
};
 
void show(Node *&Tree) //Функция обхода show - переменная
{
    if (Tree != NULL) //Пока не встретится пустое звено
    {
        show(Tree->l);            //Рекурсивная функция для вывода левого поддерева
        cout << Tree->x << '\t'; //Отображаем корень дерева
        show(Tree->r);            //Рекурсивная функции для вывода правого поддерева
        
    }
}
 
/*Добавили очистку памяти*/
void del(Node *&Tree)
{
    if (Tree != NULL) //Пока не встретится пустое звено
    {
        del(Tree->l); //Рекурсивная функция прохода по левому поддереву
        del(Tree->r); //Рекурсивная функци для прохода по правому поддереву
        delete Tree;  //Убиваем конечный элемент дерева
        Tree = NULL;  //Может и не обязательно, но плохого не будет
    }
}
 
void add_node(int x, Node *&MyTree) //Фукция добавления звена в дерево
{
    if (NULL == MyTree) //То, о чем я в самом начале писал. Если дерева нет, то ложим семечко
    {
        MyTree = new Node;              //Выделяем память под звено дерева
        MyTree->x = x;                  //Записываем данные в звено
        MyTree->l = MyTree->r = NULL; //Подзвенья инициализируем пустотой во избежание ошибок
    }
 
    if (x < MyTree->x) //Если нововведенный элемент x меньше чем элемент x из семечка дерева, уходим влево
    {
        if (MyTree->l!= NULL)
            add_node(x, MyTree->l); //При помощи рекурсии заталкиваем элемент на свободный участок
        else                         //Если элемент получил свой участок, то
        {
            MyTree->l = new Node;                 //Выделяем память левому подзвену. Именно подзвену, а не просто звену
            MyTree->l->l = MyTree->l->r = NULL; //У левого подзвена будут свои левое и правое подзвенья, инициализируем их пустотой
            MyTree->l->x = x;                     //Записываем в левое подзвено записываемый элемент
        }
    }
 
    if (x > MyTree->x) //Если нововведенный элемент x больше чем элемент x из семечка дерева, уходим вправо
    {
        if (MyTree->r != NULL)
            add_node(x, MyTree->r); //При помощи рекурсии заталкиваем элемент на свободный участок
        else                         //Если элемент получил свой участок, то
        {
            MyTree->r = new Node;                 //Выделяем память правому подзвену. Именно подзвену, а не просто звену
            MyTree->r->l = MyTree->r->r = NULL; //У правого подзвена будут свои левое и правое подзвенья, инициализируем их пустотой
            MyTree->r->x = x;                     //Записываем в правое подзвено записываемый элемент
        }
    }
}
 
int main()
{
    Node *Tree = NULL; //Создаю указатель, тип которого = звено дерева и инициализирую его пустотой
    srand(100);
    //for (int i = 5; i > 0; i++)
    for (int i=0; i < 10; ++i)
    
        add_node(i, Tree); 
        std::cout << rand() << "\t";
    show(Tree);         //Вывод на экран дерева. или просто обход дерева
    
 
    del(Tree); //Чистка памяти! Распилили дерево
 
 
    std::cin.clear();
    std::cin.ignore(32767, '\n');
    std::cin.get();
}
0

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

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.09.2019, 16:56
Ответы с готовыми решениями:

Исходное бинарное дерево превратить в бинарное дерево поиска, при этом сохранив его структуру
Помогите, не могу понять!( Нужно исходное бинарное дерево превратить в бинарное дерево поиска, при...

Бинарное дерево. Поиск числа ветвей по значению
Задание: Написать программу, к-я находит длину пути (число ветвей) от корня до ближайшего значения...

Построить бинарное дерево, элементами которого являются числа
Помогите решить задание: построить бинарное дерево, элементами которого являются числа. Удалить из...

Для каждого числа последовательности узнать, входит ли оно в бинарное дерево
Дана задача: даны две последовательности чисел. Построить бинарное дерево, содержащее числа...

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.09.2019, 16:56

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

Можно ли создать бинарное дерево поиска с элементами, которые являют собой имена или же что-то другое (НЕ числа)
Если да, как это сделать ? Киньте ссылку/напишите тут, если не сложно. Заранее спасибо!

Бинарное дерево. Удалить из дерева часть вершин так, чтобы оставшееся дерево стало пирамидой
Дано бинарное дерево. Удалить из дерева часть вершин так, чтобы оставшееся дерево стало пирамидой.

Бинарное дерево
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; int last; void add(double volue)...

C++, Бинарное дерево
Привет. Можете помочь с заданием. Прочитал кучу теорию по бинарным деревьям. Сел делать вообще не...


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

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

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