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

Восстановление баланса в AVL-дереве - C++

Восстановить пароль Регистрация
 
Khelleos
37 / 37 / 7
Регистрация: 13.05.2010
Сообщений: 283
Записей в блоге: 1
29.05.2011, 22:01     Восстановление баланса в AVL-дереве #1
При частом удаление элементов из АВЛ-дерева, программа выдает ошибку
---------------------------
Debugger Exception Notification
---------------------------
Project Game.exe raised exception class EAccessViolation with message 'Access violation at address 00408B66 in module 'Game.exe'. Read of address 00000028'.
---------------------------
Break Continue Help
---------------------------

вот код восстановления баланса
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
void TMain::AVL_Tree::bal_right(AVLT **Parent)
{
    AVLT *Child;
    if (h == 1)
        switch ((**Parent).Balance)
        {
            case -1:
                (**Parent).Balance = 0;
                h = 0;
                break;
            case  0:
                (**Parent).Balance = 1;
                h = 0;
                break;
            case  1:
                Child = (**Parent).Right;
                if (((*Child).Balance == 1) || (*Child).Balance == 0)
                {
                    (**Parent).Right = (*Child).Left;
                    (*Child).Left = *Parent;
                    if ((*Child).Balance==0)
                    {
                        (*Parent)->Balance = 1;
                        Child->Balance = -1;
                        h = 0;
                    }
                    else
                    {
                        (*Parent)->Balance = 0;
                        Child->Balance = 0;
                    }
                    *Parent = Child;
                }
                else
                {
                    Right2Rotation(Parent, Child);
                }
                break;
        }
}
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
void TMain::AVL_Tree::bal_left(AVLT **Parent)
{
    AVLT *Child;
    if (h == 1)
        switch ((**Parent).Balance)
        {
            case 1 :
                (**Parent).Balance = 0;
                h = 0;
                break;
            case 0 :
                (**Parent).Balance = -1;
                h = 0;
                break;
            case -1:
                Child = (**Parent).Left;
                if (((*Child).Balance == -1) || (*Child).Balance == 0)
                {
                    (**Parent).Left = (*Child).Right;
                    (*Child).Right = *Parent;
                    if ((*Child).Balance == 0)
                    {
                        (*Parent)->Balance = -1;
                        Child->Balance = 1;
                        h = 0;
                    }
                    else
                    {
                        (*Parent)->Balance = 0;
                        Child->Balance = 0;
                    }
                    *Parent = Child;
                }
                else
                {
                    Left2Rotation(Parent, Child);
                }
                 break;
        }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.05.2011, 22:01     Восстановление баланса в AVL-дереве
Посмотрите здесь:

C++ Проверка баланса скобок
C++ Ищу готовый код с примерами реализации деревьев (AVL, красно-черное, декартово)
C++ AVL - дерево, ошибка линковки <LNK2001>
C++ Ошибка компиляции. AVL-дерево
Проверить на эквивалентность два AVL-дерева C++
Определить, является ли дерево AVL деревом C++
C++ AVL-деревья. Добавить балансировку путем поворотов
C++ Функция удаления всех четных элементов AVL-дерева

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

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

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