Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Есть ли какая-нибудь команда, которая находит минимальное число в массиве? https://www.cyberforum.ru/ cpp-beginners/ thread2252430.html
А то очень сложно сравнивать 100 элементов в ручную Или команда, которая хотя бы просто сравнивает элементы.
C++ Сформировать одномерный массив из элементов матрицы, расположенных над главной диагональю
Дан двумерный массив размером nxn. Сформировать одномерный массив из элементов заданного массива, расположенных над главной диагональю. Для решения необходимо в программе производить чтение входных...
C++ Создать файл, содержащий сообщение о студентах (фамилии, инициалы) и результаты аттестации
Создать файл, содержащий сообщение о студентах (фамилии, инициалы) и результаты аттестации. Прочитать файл и вывести на экран, и в файл список не аттестованных студентов. C++
C++ Дан двумерный массив. Переставить в обратном порядке строки, расположенные между k-й и s-й строками Дан двумерный массив из пятнадцати строк и восьми столбцов. Переставить в обратном порядке строки, расположенные между k-й и s-й строками (т. е. с (k + 1)-й по (s – 1)-ю). Значения k и s вводятся с... https://www.cyberforum.ru/ cpp-beginners/ thread2252425.html
C++ Возможно ли сделать определенное количество переменных в цикле? https://www.cyberforum.ru/ cpp-beginners/ thread2252417.html
В общем у меня есть одна вводимая переменная, которая указывает на количество других переменных, и собственно вопрос: можно ли сделать несколько этих самых других переменных в цикле?
Конструктор класса не дает инициализировать переменную класса C++
Привет. Вот такой вот класс. Когда пытаюсь в конструкторе присвоить name и hobby что либо, пишет ошибку: выражение должно быть допустимым для изменения левосторонним значением. Покопался в предыдущих...
Прямоугольники и гвозди (C++) C++
Не могу понять суть задачи, помогите пожалуйста) На координатной плоскости задано N прямоугольников – кождый парой противоположных вершин, стороны которых параллельны осям координат, а координаты...
C++ Нужно написать метод разности множеств в классе Доброго времени суток. Нужно написать метод разности множеств. Код класса: #include <iostream> using namespace std; class Set https://www.cyberforum.ru/ cpp-beginners/ thread2252276.html
C++ Подсчет суммарного количества страниц в словарях https://www.cyberforum.ru/ cpp-beginners/ thread2252273.html
Не могу понять в чем именно ошибка, может вы сможете мне помочь? char language; int number, i, j, n, sum, k, t, ser; boolean a; ifstream f1(name, ios::binary); for (i = 0; !f1.eof(); i++) {...
C++ Заполнение матрицы змейкой Дано натуральное N (1<=N<=10). Заполнить матрицу размера N*N целыми числами 0, 1, 2, 3, …, N^2–1 Как сделать, что бы матрицу заполнило N^2 т.е: например при вводе 5 , что бы получилось так ... https://www.cyberforum.ru/ cpp-beginners/ thread2252271.html
0 / 0 / 0
Регистрация: 28.02.2016
Сообщений: 198
0

Как в программе происходит прямой обход по бинарному дереву?

24.05.2018, 16:40. Показов 370. Ответов 0
Метки (Все метки)

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
#include "stdafx.h"
#include <iostream> 
using namespace std;
struct Node
{
    Node *l, *r; //левое и правое поддерево
    int x; //Некоторые данные
};
 
/*ФУНКЦИЯ ДОБАВЛЕНИЯ ЗВЕНА В ДЕРЕВО*/
void add(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(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(x, MyTree->r); //При помощи рекурсии заталкиваем элемент на свободный участок
        else //Если элемент получил свой участок, то
        {
            MyTree->r = new Node;  //Выделяем память правому подзвену. Именно подзвену, а не просто звену
            MyTree->r->l = MyTree->r->r = NULL; //У правого подзвена будут свои левое и правое подзвенья, инициализируем их пустотой
            MyTree->r->x = x; //Записываем в правое подзвено записываемый элемент 
        }
    }
 
}
 
/*ОБХОД В ПРЯМОМ ПОРЯДКЕ*/
void Show(Node *&tree)
{
    if (NULL == tree)    return;    //Если дерева нет, выходим
 
    cout << tree->x << endl; //Посетили узел
    Show(tree->l); //Обошли левое поддерево   
    Show(tree->r); //Обошли правое поддерево   
}
int main()
{
    int x; //Некоторые данные
    Node *MyTree = NULL; //Указатель на нашу структуру. Инициализируем во избежание ошибок
 
    for (int i = 0; i<7; i++) //В дереве будет 7 узлов
    {
        cout << "X = "; cin >> x; //Ввели X с клавиатуры
        add(x, MyTree); //Добавили X в дерево
    }
 
    Show(MyTree);
Вот нашел, добавления элемента в дерево понят, а вот обход нет, она правильно выводит прямой обход по дереву, но как он это делает, как он знает, что надо начала по левой стороне идти и в той же левой стороне выводить потом правые элементы, тут же нету никакх встроенных функций, которые бы это делали????

Вернуться к обсуждению:
Как в программе происходит прямой обход по бинарному дереву?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.05.2018, 16:40
Готовые ответы и решения:

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

Подключение к бинарному дереву списка
Вот есть такой вот код. Не могу подключить к моему узлу бинарного дерева односвязный список ...

Итератор для обхода по бинарному дереву
Кхм. Попытался реализовать итератор для обхода по бинарному дереву... Наткнулся на запару. Дерево...

Поиск по бинарному дереву целочисленных значений
Здравствуйте! Очень нужна помощь данном, надеюсь что простом, задании. Заранее спасибо!:-[ ...

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