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

АВЛ дерево

14.12.2022, 22:29. Показов 782. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! На хабре есть реализация авл-дерева и по коду есть вопрос: есть ли фрагменты кода, в которых возможна такая ситуация, что вызываются поля у nullptr? Если есть, укажите, пожалуйста, эти фрагменты)
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
struct node // структура для представления узлов дерева
{
    int key;
    unsigned char height;
    node* left;
    node* right;
    node(int k) { key = k; left = right = 0; height = 1; }
};
 
unsigned char height(node* p)
{
    return p?p->height:0;
}
 
int bfactor(node* p)
{
    return height(p->right)-height(p->left);
}
 
void fixheight(node* p)
{
    unsigned char hl = height(p->left);
    unsigned char hr = height(p->right);
    p->height = (hl>hr?hl:hr)+1;
}
 
node* rotateright(node* p) // правый поворот вокруг p
{
    node* q = p->left;
    p->left = q->right;
    q->right = p;
    fixheight(p);
    fixheight(q);
    return q;
}
 
node* rotateleft(node* q) // левый поворот вокруг q
{
    node* p = q->right;
    q->right = p->left;
    p->left = q;
    fixheight(q);
    fixheight(p);
    return p;
}
 
node* balance(node* p) // балансировка узла p
{
    fixheight(p);
    if( bfactor(p)==2 )
    {
        if( bfactor(p->right) < 0 )
            p->right = rotateright(p->right);
        return rotateleft(p);
    }
    if( bfactor(p)==-2 )
    {
        if( bfactor(p->left) > 0  )
            p->left = rotateleft(p->left);
        return rotateright(p);
    }
    return p; // балансировка не нужна
}
 
node* insert(node* p, int k) // вставка ключа k в дерево с корнем p
{
    if( !p ) return new node(k);
    if( k<p->key )
        p->left = insert(p->left,k);
    else
        p->right = insert(p->right,k);
    return balance(p);
}
 
node* findmin(node* p) // поиск узла с минимальным ключом в дереве p 
{
    return p->left?findmin(p->left):p;
}
 
node* removemin(node* p) // удаление узла с минимальным ключом из дерева p
{
    if( p->left==0 )
        return p->right;
    p->left = removemin(p->left);
    return balance(p);
}
 
node* remove(node* p, int k) // удаление ключа k из дерева p
{
    if( !p ) return 0;
    if( k < p->key )
        p->left = remove(p->left,k);
    else if( k > p->key )
        p->right = remove(p->right,k);  
    else //  k == p->key 
    {
        node* q = p->left;
        node* r = p->right;
        delete p;
        if( !r ) return q;
        node* min = findmin(r);
        min->right = removemin(r);
        min->left = q;
        return balance(min);
    }
    return balance(p);
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.12.2022, 22:29
Ответы с готовыми решениями:

Определение типа вращения в АВЛ-дереве
def rebalance(self,node): if node.balanceFactor &lt; 0: if node.rightChild.balanceFactor &gt; 0: ...

Как перевести постфиксное выражение(обратная польская нотация) в дерево или из инфиксной записи в дерево
Дано выражение в обратной польской записи. Каков алгоритм его построения в бинарном дереве?...

В чем разница идеально сбалансированного дерева и АВЛ дерева?
Добрый день, сам вопрос впринципе описан в заголовке. Перелазил большую часть интернета и...

Есть мин-ое остовое дерево к заданному графу. Нужно добавить к этому графу новое ребро, и предложить алгоритм, который перестроит мин-е остовое дерево
Полный текст задачи: &quot;Предположим, что у нас имеется минимальное остовое дерево Т заданного графа G...

АВЛ-дерево, идеально сбалансированное дерево.
Суть: Создать базовый абстрактный класс (дерево), от него наследовать АВЛ-дерево, от него идеально...

3
1017 / 1905 / 178
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
15.12.2022, 07:26 2
Цитата Сообщение от Programmer03 Посмотреть сообщение
поля у nullptr
это что?
0
Модератор
Эксперт функциональных языков программирования
3072 / 2221 / 461
Регистрация: 26.03.2015
Сообщений: 8,611
17.12.2022, 01:54 3
vantfiles,
Видимо, речь о NRE (null reference exception).
0
4263 / 3322 / 925
Регистрация: 25.03.2012
Сообщений: 12,515
Записей в блоге: 1
18.12.2022, 13:42 4
Это какой-то теоретический вопрос ни о чём или тебе по реальной работе надо.
Может ты просто стянул код с хабра, показал преподу, он это понял и начал задавать вопросы тупо чтоб проверить - как ты понял код.
0
18.12.2022, 13:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.12.2022, 13:42
Помогаю со студенческими работами здесь

АВЛ дерево
Здравствуйте! На хабре есть реализация авл-дерева и по коду есть вопрос: есть ли фрагменты кода, в...

АВЛ-дерево
Из входной последовательности символов построить АВЛ-дерево без повторов. Найти в нем узел,...

ДЕрево АВЛ
Кому не трудно помогите,!!!!!!Хоть что небудь!!!

АВЛ-дерево
Помогите с информацией по реализации АВЛ деревьев на С#. Ссылки на статьи с кодом например.

АВЛ Дерево
не понимаю, как сделать - поиск по значению и Обходы: - обход в глубину (pre-order) - обход в...

АВЛ Дерево
Выполнить операцию разности двух АВЛ-деревьев. Под разностью понимается дерево, содержащее вершины...


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

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

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