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

Последний элемент нулл

08.02.2019, 17:56. Показов 255. Ответов 0
Метки нет (Все метки)

Всем добрый вечер!

Знакомлюсь тут с деревьями, написала функцию next(), но она почему-то не выводит последний элемент... Как-то в пятницу вечером туго с соображаловкой, не могу понять что неправильно сделала. Подскажите, пожалуйста.

Вот код мейна
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int main()
{
    std::vector<int> v = { 1, 5, 3, 8, 22, 69, 7, 43, 26 };
    branch* tree = vector_to_tree(v);
 
    std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, ", "));
    std::cout << "\n";
 
    while (tree)
    {
        std::cout << " - " << tree->value << "\n";
        tree = next(tree);
    }
}
Вот функции
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
struct branch
{
    int value;
    branch* parent;
    branch* left;
    branch* right;
};
 
branch* add(int value, branch* where = nullptr)
{
    branch* b = new branch;
    b->value = value;
    b->left = nullptr;
    b->right = nullptr;
    b->parent = nullptr;
 
    if (!where) return b;
 
    b->parent = where;
    if (where->value < value)
        if (where->right)
            add(value, where->right);
        else
            where->right = b;
 
    if (where->value >= value)
        if (where->left)
            add(value, where->left);
        else
            where->left = b;
 
    return b;
}
 
 
branch* min(branch* tree)
{
    while (tree->left)
        tree = tree->left;
 
    return tree;
}
 
branch* max(branch* tree)
{
    if (!tree) return nullptr;
 
    while (tree->right)
        tree = tree->right;
 
    return tree;
}
 
void remove(branch* to_delete)
{
    if (!to_delete->left && !to_delete->right)
        to_delete = nullptr;
    else
        to_delete = min(to_delete->left);
}
 
branch* next(branch* b)
{
    if (b->right)
        return min(b->right);
    
    if (b->left)
        return max(b->right);
 
    if (b->parent)
        return b->parent;
 
    return nullptr;
}
 
branch* prev(branch* b)
{
    if (b->left)
        return max(b->left);
 
    return nullptr;
}
 
branch* vector_to_tree(const std::vector<int>& v)
{
    branch* head = new branch;
    head->value = v.at(0);
    head->left = nullptr;
    head->right = nullptr;
    head->parent = nullptr;
 
    branch* tree = head;
    for (int i = 1; i < v.size(); ++i)
        add(v[i], tree);
 
    return head;
}
Спасибо!
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.02.2019, 17:56
Ответы с готовыми решениями:

Вывести содержимое списка в следующем порядке: первый элемент, последний элемент, второй элемент, предпоследни
#include &lt;iostream&gt; #include &lt;list&gt; #include &lt;iterator&gt; void output(std::list&lt;int&gt; myList,...

Строки. Как найти в слове первый элемент? Второй элемент, последний элемент?
как найти в слове первый элемент?Второй элемент,последний элемент.С помощью каких операторов это...

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

Найти максимальный элемент массива и вывести последний четный элемент
Короче нужно чтобы програма нашла максимальный елемент масива и выводила на екран последное четное...

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

Массив: Найти первый отрицательный элемент в каждой строке и последний четный элемент в каждом столбце.
Дан двумерный массив двухбайтовых знаковых целочисленных элементов 5*8. Полагаем,что в каждой...

Задача Иосифа Флавия. Удалить каждый второй элемент из списка и в конце вывести на экран последний оставшийся элемент
Создать циклический список, в котором находятся элементы от 1 до N. Нужно написать программу,...

Заменить последний положительный элемент одномерного массива на второй элемент массива
Написать программу по заданию: заменить последний положительный элемент одномерного массива на...

Заменить последний положительный элемент одномерного массива на второй элемент массива
#include &lt;string&gt; #include&quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;string&gt; ...


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

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

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