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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
poteytus
0 / 0 / 0
Регистрация: 18.12.2015
Сообщений: 1
#1

Декартово дерево - C++

15.03.2016, 12:09. Просмотров 123. Ответов 0
Метки нет (Все метки)

C++ (Qt)
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
#include <windows.h>
#include <iostream>
struct item {
    int key, prior;
    item * l, *r;
    item() { }
    item(int key, int prior) : key(key), prior(prior), l(NULL), r(NULL) { }
};
typedef item * pitem;
 
void split(pitem t, int key, pitem & l, pitem & r) {
    if (!t)
        l = r = NULL;
    else if (key < t->key)
        split(t->l, key, l, t->l), r = t;
    else
        split(t->r, key, t->r, r), l = t;
}
 
void insert(pitem & t, pitem it) {
    if (!t)
        t = it;
    else if (it->prior > t->prior)
        split(t, it->key, it->l, it->r), t = it;
    else
        insert(it->key < t->key ? t->l : t->r, it);
}
 
void merge(pitem & t, pitem l, pitem r) {
    if (!l || !r)
        t = l ? l : r;
    else if (l->prior > r->prior)
        merge(l->r, l->r, r), t = l;
    else
        merge(r->l, l, r->l), t = r;
}
 
void erase(pitem & t, int key) {
    if (t->key == key)
        merge(t, t->l, t->r);
    else
        erase(key < t->key ? t->l : t->r, key);
}
 
pitem unite(pitem l, pitem r) {
    if (!l || !r)  return l ? l : r;
    if (l->prior < r->prior)
    {
        pitem pp = l;
        l = r;
        r = pp;
    }
    pitem lt, rt;
    split(r, l->key, lt, rt);
    l->l = unite(l->l, lt);
    l->r = unite(l->r, rt);
    return l;
}
Сами операции реализовал, а вот вывод на экран и ввод с клавиатуры не получаются, буду благодарен за помощь)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.03.2016, 12:09     Декартово дерево
Посмотрите здесь:

Дано дерево. Распечатать дерево по уровням - C++
Дано дерево. Распечатать дерево по уровням.

Дерево дерево, странное дерево - C++
Нужна помощь в построении дерева. Задание таково: Вершина дерева содержит N целых значений и два указателя на потомков. Запись значений...

Реализовать дерево - C++
Реализовать бинарное дерево для хранения и операций с данными вида: Наименование блока Количество узлов Стоимость Обеспечить выполнение...

Показать дерево - C++
Нужно показать дерево, записанное вот в такую вот структуру данных: tree { tree *left,*right; int value; }; Дерево...

структура дерево - C++
помогите найти ответ, дано: struct tree{ int var; tree *m;}; int P22 (tree *p){ if (p==NULL) return 0; int...

Алгебру в дерево - C++
Надо сделать программу, которая переводит алгебраическое выражение в виде строки в дерево. Подскажите пожалуйста, как это сделать? Может...

Получи дерево - C++
Задача такая: Дан связный неориентированный граф без петель и кратных ребер. Разрешается удалять из него ребра. Требуется получить дерево....

Поисковое дерево - C++
Всем здравствуйте! Помогите, пожалуйста. Необходимо в c++ сгенерировать 22 неповторяющихся трехзначных числа и составить поисковое дерево,...

Дерево отрезков - C++
Добрый день, помогите пож-та решить задачи на с++. Нашел решение (расписаны все алгоритмы, процедуры подсчета и т. д.), но сложность...

Нерегулярное дерево - C++
Нужно разработать алгоритм, который будет создавать нерегулярное дерево (число исходящих ветвей для каждого узла на каждом уровне должно...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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