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

Как создать двоичное дерево, элементы которого заполняются по слоям слева направо? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Написать псевдокод алгоритма решения задачи: http://www.cyberforum.ru/cpp-beginners/thread862985.html
Определить в какой четверти или на осях находится точка(x,y)
C++ Дерево ( программу которая находит число ветвей от корня до ближайшей вершины со значением е) написать программу которая находит число ветвей от корня до ближайшей вершины со значением е. Если такой вершины нет то ответ должен быть -1. http://www.cyberforum.ru/cpp-beginners/thread862976.html
Задача на графику, анимация масштабирования C++
Помогите пожалуйста написать программу. Компилятор Dev C++. Консоль. Написать программу увеличения и уменьшения снежинки по достижению некоторого максимального или минимального размеров соответственно. Грубо говоря, есть снежинка (можно просто звездочку *), сделать масштабирование нажатиями клавиш "стрелочка вверх" и "стрелочка вниз" до определенного значения.
Написать коментарии C++
#include <iostream> class S { public: virtual int get() = 0;}; class A1 : public S { public: virtual int get() {
C++ Ошибка компиляции в VS2010 http://www.cyberforum.ru/cpp-beginners/thread862959.html
Написал код на Dev C++. Пихаю в визуалку и она отказываеться компилировать( Ругаеться на 116 строчку, пишет что ф-ция должна вернуть значение. но если я буду чтото возвращать или сделаю ее воид то програма будет работать не коректно. Подскажите в чем загвоздка. #include <iostream> #include <string> #include <conio.h> using namespace std; enum CATEGORY{family, sport, cabrio, jeep}; ...
C++ Fit набора точек Привет! Кто-нибудь может посоветовать уже какой-нибудь готовый код, который делает фит набора точек произвольной функцией с определенным кол-вом свободных параметров? Заранее спасибо! подробнее

Показать сообщение отдельно
xtorne21st
интересующийся
303 / 274 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
14.05.2013, 00:25     Как создать двоичное дерево, элементы которого заполняются по слоям слева направо?
В этом случаи достаточно ввести дополнительный флаг, который будет обеспечивать первое вхождение/добавление нового звена в рекурсии:
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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#include <iostream>
#include <cmath>
 
struct BNode
{
    int key;
    BNode* left;
    BNode* right;
    BNode* parent;
};
 
BNode* global_root = 0;
bool state = false, state2 = false;
 
static double curr_node = 0;
static double curr_line = 1;
 
unsigned get_line()
{
    ++curr_node;
    if ((pow(curr_node, 1/(curr_line))) == 2.0)
    {
        ++curr_line;
    }
    return curr_line;
}
 
void put_node(BNode* root, int key, int depth)
{
    
    if (!state)
    {
        state = true;
        get_line();
    }
 
    if (curr_line == 1)
    {
        global_root = new BNode;
        global_root->left = global_root->right = 0;
        global_root->parent = global_root;
        global_root->key = key;
        return;
    }
 
    if (depth >= curr_line)
    {
        return;
    }
 
    if (!root->left)
    {
        if (!state2 && depth < curr_line)
        {
            state2 = true;
            root->left = new BNode;
            root->left->left = root->left->right = 0;
            root->left->parent = root;
            root->left->key = key;
            return;
        }
    }
 
    if (!root->right)
    {
        if (!state2 && depth < curr_line)
        {
            state2 = true;
            root->right = new BNode;
            root->right->left = root->right->right = 0;
            root->right->parent = root;
            root->right->key = key;
            return;
        }
    }
 
    if (root->left)
    {
        put_node(root->left, key, depth+1);
    }
 
    if (root->right)
    {
        put_node(root->right, key, depth+1);
    }
}
 
void show_tree(BNode* root, int lvl)
{
    if (!root)
    {
        return;
    }
    std::cout << "lvl: " << lvl << "; key: " << root->key << std::endl;
    show_tree(root->left, lvl + 1);
    show_tree(root->right, lvl + 1);
}
 
int main()
{
    put_node(global_root, 4, 1); state = state2 = false;
    show_tree(global_root, 1); std::cout << std::endl;
    put_node(global_root, 2, 1); state = state2 = false;
    show_tree(global_root, 1); std::cout << std::endl;
    put_node(global_root, 6, 1); state = state2 = false;
    show_tree(global_root, 1); std::cout << std::endl;
    put_node(global_root, 1, 1); state = state2 = false;
    show_tree(global_root, 1); std::cout << std::endl;
    put_node(global_root, 2, 1); state = state2 = false;
    show_tree(global_root, 1); std::cout << std::endl;
    put_node(global_root, 3, 1); state = state2 = false;
    show_tree(global_root, 1); std::cout << std::endl;
    put_node(global_root, 5, 1); state = state2 = false;
    show_tree(global_root, 1); std::cout << std::endl;
    put_node(global_root, 7, 1); state = state2 = false;
 
    show_tree(global_root, 1);
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru