Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
xAndeRx
3 / 3 / 1
Регистрация: 25.10.2012
Сообщений: 218
1

Разобраться в бинарном дереве

07.03.2015, 18:54. Просмотров 451. Ответов 8
Метки нет (Все метки)

Нашел вот такой вариант построения бинарного дерева.
Просьба прокомментировать строки кода которые выделил ниже:

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
#include <iostream>
#include<windows.h>
using namespace std;
 
struct point
{
    int data;//информационное поле
    point *left;//адрес левого поддерева
    point *right;//адрес правого поддерева
};
 
point* Tree(int NumberOfElements, point *p)
{
    point *r = new point;
    int nleft, nright;
    if (NumberOfElements == 0){ p = NULL; return p; }
    nleft = NumberOfElements / 2;                                // 1)зачем нужно это
    nright = NumberOfElements - nleft - 1;                     // 2)зачем нужно это
    
    cout << "элемент:";
    cin >> r->data;
    r->left = Tree(nright, r->left);                                // 3)зачем нужно это
    r->right = Tree(nleft, r->right);                              // 4)зачем нужно это
    p = r;
    return p;
}
 
void Print(point*p, int l)
{
    if (p)
    {
        Print(p->left, l + 5);
        for (int i = 0; i<l; i++)
            cout << " ";
        cout << p->data << "\n";
        Print(p->right, l + 5);
    }
}
 
void main()
{
    setlocale(LC_ALL, "Russian");
    int NumberOfElements, i = 0;
    cout << "Задайте количество элементов дерева\n";
    cin >> NumberOfElements;
    point *root = new point;
    root = Tree(NumberOfElements, root);
    Print(root, 1);
    system("pause -> void");
}
Вверху выделил 4 строки, объясните что в них делается? Не "переменной nleft присваивается ..." а именно в плане дерева, зачем и как это используется.

Буду очень благодарен.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.03.2015, 18:54
Ответы с готовыми решениями:

Поиск в бинарном дереве
Привет всем! Нужно написать код, с которым в бинарном дереве можно найти...

Поиск в Бинарном Дереве!
Задано бинарное дерево. Определить, есть ли в этом дереве хотя бы два ...

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

Строки в бинарном дереве
Есть шаблонный класс бинарного дерева. Со числами он работает нормально, но при...

Количество листов в бинарном дереве
дан указатель р1 на корень непустого дерева. найти количество листов void...

8
zer0mail
2452 / 2089 / 216
Регистрация: 03.07.2012
Сообщений: 7,571
Записей в блоге: 1
07.03.2015, 19:07 2
Рекурсивно создается сбалансировавнное бинарное дерево с количеством узлов NumberOfElements.
Создается новый узел, затем левое поддерево узла, затем правое.
0
Curry
2561 / 1724 / 220
Регистрация: 01.06.2013
Сообщений: 3,606
Записей в блоге: 7
07.03.2015, 19:13 3
1 - выделяем примерно половину из оставшихся элементов дерева в левое поддерево (для чётного ровно половину)
2 - оставшееся число элементов будет в правом поддереве.
3 - рекурсивно вызываем Tree для создания левого поддерева.
4 - рекурсивно вызываем Tree для создания правого поддерева.
0
xAndeRx
3 / 3 / 1
Регистрация: 25.10.2012
Сообщений: 218
07.03.2015, 19:30  [ТС] 4
Благодарю, понял.

А подскажете как реализовать, чтобы элементы дерева распределялись по правилу: если элемент меньше его родителя, то он идет влево, если больше, то в право?
0
zer0mail
2452 / 2089 / 216
Регистрация: 03.07.2012
Сообщений: 7,571
Записей в блоге: 1
07.03.2015, 19:39 5
Читай про балансировку бинарного дерева.
0
xAndeRx
3 / 3 / 1
Регистрация: 25.10.2012
Сообщений: 218
08.03.2015, 04:46  [ТС] 6
В принципе понял общую конструкцию, но как это реализовать на формах? Как прогонять эту проверку в дереве готовом. Сижу, голову ломаю, ничего не приходит..
0
zer0mail
2452 / 2089 / 216
Регистрация: 03.07.2012
Сообщений: 7,571
Записей в блоге: 1
08.03.2015, 08:13 7
"Хозяйка, дай попить, а то так есть хочется, что переночевать негде..."
0
xAndeRx
3 / 3 / 1
Регистрация: 25.10.2012
Сообщений: 218
08.03.2015, 12:37  [ТС] 8
zer0mail, настолько смысловой ответ, что помог мне решить все проблемы разом...
Я прошу помочь, а не шутить. Если вам не хочется этого делать, могли бы и не отписываться вовсе.
0
zer0mail
2452 / 2089 / 216
Регистрация: 03.07.2012
Сообщений: 7,571
Записей в блоге: 1
08.03.2015, 22:49 9
Цитата Сообщение от xAndeRx Посмотреть сообщение
zer0mail, настолько смысловой ответ, что помог мне решить все проблемы разом...
Рад за вас Коль хотите получать ответы, не тяните кота за я.., а сразу четко формулируйте, что вас интересует. Чтобы другие могли оценить - стоит ли напрягаться или нет.
Лично я не буду (не люблю, когда меня "раскручивают")...
0
08.03.2015, 22:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.03.2015, 22:49

Сумма чисел в бинарном дереве
Выбрать уровень(глубину, высоту) бинарного дерева и посчитать сумму чисел(в...

Сумма элементов в бинарном дереве
Требуется реализовать функцию(void findSum(); ) которая определить сумму цифр в...

Поиск дубликатов в бинарном дереве
Требуется создать функцию поиска дубликатов ИНФОРМАЦИОННОЙ ЧАСТИ, НЕ КЛЮЧА в...


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

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

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