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

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

Войти
Регистрация
Восстановить пароль
 
Khelleos
37 / 37 / 7
Регистрация: 13.05.2010
Сообщений: 283
Записей в блоге: 1
#1

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

29.05.2011, 22:01. Просмотров 456. Ответов 0
Метки нет (Все метки)

При частом удаление элементов из АВЛ-дерева, программа выдает ошибку
---------------------------
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-дереве
Посмотрите здесь:

Ошибка компиляции. AVL-дерево - C++
#include <iostream> struct node { int key; node* left; node* right; }; class avl_tree { private:

Проверить на эквивалентность два AVL-дерева - C++
Такое вот задание: проверить на эквивалентность два АВЛ-дерева. Если они не являются информационно эквивалентными, указать минимальное по...

Определить, является ли дерево AVL деревом - C++
int s, kol, sr, a; void avl(PNode ptr) { int h1 = 0, h2 = 0, i = 0; if ((ptr->Left == NULL) && (ptr->Right == NULL)) { ...

AVL - дерево, ошибка линковки <LNK2001> - C++
Здравствуйте форумчане! У меня возникли некоторые трудности с линковщиком, помогите разобраться с ним, если не сложно:wall: Пытаюсь...

AVL-деревья. Добавить балансировку путем поворотов - C++
имеется такая программа, помогите дополнить ее, добавив авл-балансировку путем поворотов. сам мало чего в них понимаю:( #include...

Функция удаления всех четных элементов AVL-дерева - C++
Помогите допилить функцию удаления всех парных элементов АВЛ дерева. Она сейчас удаляет только элементы, которые находятся в правой...

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

Не получается реализовать вывод баланса - C++
Делал задачу с наследованием, но не получается вывод баланса. долг выводится, а баланс всегда 0(( Как исправить уж не знаю, и ума не...

Произвести проверку соблюдения баланса скобок - C++
Произвести проверку соблюдения баланса скобок вида ‘(‘, ’)’ в арифметическом выражении. Использовать системный стек. нужно на С

Произвести проверку соблюдения баланса скобок в выражении - C++
Задано арифметическое выражение, содержащее скобки трех типов: (, ), {, }, . Произвести проверку соблюдения баланса скобок. Использовать...


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

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

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