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

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

Восстановить пароль Регистрация
 
poteytus
0 / 0 / 0
Регистрация: 18.12.2015
Сообщений: 1
15.03.2016, 12:09     Декартово дерево #1
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++ B-дерево
C++ Дерево
C++ Дерево
C++ Ищу готовый код с примерами реализации деревьев (AVL, красно-черное, декартово)
C++ Декартово дерево
Декартово произведение множеств C++
C++ C++, реализовать декартово дерево
C++ Builder Переделать декартово произведение множеств на формах

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

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

Текущее время: 05:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru