Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 13.03.2015
Сообщений: 18

Немного бинарных деревьев

19.04.2017, 17:06. Показов 929. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно что-то допилить в рекурсивном методе siftDown (просеивание кучи вниз), у меня оно работает как-то не правильно, может тут кто поможет...
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
#include <iostream>
#include <algorithm>
class Heap
{
    int *heap, size, slider, count;
public:
    Heap(void)
    {
        create();
        slider = -1;
    }
    void setS(const int &s)
    {
        size = s;
    }
    void setC(const int &cnt)
    {
        count = cnt;
    }
    int getH() const
    {
        return *heap;
    }
    int getC() const
    {
        return count;
    }
    void create()
    {
        heap = new int[size];
    }
    void in(const int &val)
    {
        heap[++slider] = val;
    }
    void add(const int &pos, const int &val)
    {
        heap[pos] -= val;
    }
    int siftDown(int nodeIndex)
    {
        int child = 2 * nodeIndex + 1;
        int child1 = 2 * nodeIndex + 2;
        if (heap[nodeIndex] < heap[child])
        {
            std::swap(heap[nodeIndex], heap[child]);
            siftDown(child);
        }
        else if (heap[nodeIndex] < heap[child1])
        {
            std::swap(heap[nodeIndex], heap[child1]);
            siftDown(child1);
        }
        else return nodeIndex;
    }
    void out()
    {
        for (int i = 0; i < size; ++i)
            std::cout << heap[i] << ' ';
        std::cout << std::endl;
    }
    ~Heap()
    {
        delete[] heap;
    }
}heap;
 
int main()
{
    //std::cout << "Input size -> ";
    int sz, val;
    std::cin >> sz;
    heap.setS(sz);
    heap.create();
    //std::cout << "Input values -> ";
    for (int i = 0; i < sz; ++i)
    {
        std::cin >> val;
        heap.in(val);
    }
    int cnt;
    //std::cout << "Input count of operations -> ";
    std::cin >> cnt;
    int value, position;
    //std::cout << "Input position, value -> " << std::endl;
    for (int i = 0; i < cnt; ++i)
    {
        std::cin >> position >> value;
        heap.add(position - 1, value);
        heap.out();
        int posEl = heap.siftDown(position - 1);
        heap.out();
        std::cout << posEl + 1 << std::endl;
    }
    heap.out();
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.04.2017, 17:06
Ответы с готовыми решениями:

Слияние бинарных деревьев
Слияние - это функция выбора элемента из двух Берем два дерева; функцию, которая выбирает один элемент из двух T fun(T x1, Tx2); ...

Класс бинарных деревьев. Наследование
Доброго времени суток! Имеется задание написать абстрактный класс бинарного дерева и класс рациональных чисел. От них отнаследовать классы...

Копирование и объединение бинарных деревьев
Всем здравствуйте, в университете на лабораторной работе дали задачу объединить 2 бинарных дерева. Алгоритм их объединения выполняется...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.04.2017, 17:06
Помогаю со студенческими работами здесь

Объединение 2-х бинарных деревьев в одно
Необходима функция объединения 2-х бинарных сбалансированных деревьев в одно.

Нужен совет по алгоритмам, обход бинарных деревьев
Всем привет! Вопрос может показаться немного глупым но все же: есть тема курсача &quot;Обход бинарных деревьев методом перебора&quot; ...

Создать функции ввода/вывод для бинарных деревьев
Не могу создать функции ввода/вывод для бинаных деревьев. очень срочно нужно! скажите где ошибка... Вот текст: #include ...

Массив: Учащиеся участвовали в посадке деревьев. Сколько деревьев было посажено
1)Учащиеся 8-х классов участвовали в посадке деревьев. 8-а посадил 100 деревьев, 8-б —122 дерева, 8-в — 98 деревьев, 8-г — 104 дерева, 8-д...

Почему так(комбинации бинарных и не бинарных вводов и выводов)?
#include &lt;string&gt; #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;iomanip&gt; using namespace std; int main() { ...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Киев стоит - украинская песня
zorxor 28.01.2026
wfWdiRqdTxc О Господи, Вечный, Ты . . . Я помоги, Бесконечный. . . Я прошу Ты. . . Я погибаю, спаси. . . Я прошу Тебя Вечный. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru