|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
23.07.2011, 22:15 | #1 |
Регистрация: 23.01.2011
Сообщений: 5
|
Проблема с АВЛ деревом
void search(int x, Node **p, int h)
{ Node *p1, *p2; if (!(*p)) { *p = malloc(sizeof(Node)); h = 1; (*p)->x = x; (*p)->left = NULL; (*p)->right = NULL; (*p)->bal = 0; } else if (x <= (*p)->x) { search(x, &((*p))->left, h); if (h) { switch ((*p)->bal) { case 1: (*p)->bal = 0; h = 0; break; case 0: (*p)->bal = -1; break; case -1: p1 = (*p)->left; if (p1->bal == -1) { (*p)->left = p1->right; (*p)->right = p1; (*p)->bal = 0; **p = *p1; } else { p2 = p1->right; p1->right = p2->left; p2->left = p1; (*p)->left = p2->right; p2->right = *p; if (p2->bal == -1) (*p)->bal = 0; else (*p)->bal = 1; if (p2->bal == 1) p1->bal = -1; else p1->bal = 0; **p = *p2; } (*p)->bal = 0; h = 0; break; } } } else { search(x, &((*p)->right), h); if (h) { switch ((*p)->bal) { case 1: (*p)->bal = 0; h = 0; break; case 0: (*p)->bal = -1; break; case -1: p1 = (*p)->right; if (p1->bal == 1) { (*p)->right = p1->left; p1->left = *p; (*p)->bal = 0; *p = p1; } else { p2 = p1->left; p1->left = p2->right; // В этом месте p2->right = p1; (*p)->right = p2->left; p2->left = *p; if (p2->bal == 1) (*p)->bal = -1; else (*p)->bal = 0; if (p2->bal == -1 ) p1->bal = 1; else p1->bal = 0; *p = p2; } (*p)->bal = 0; h = 0; break; } } } } При вставки 1 2 3 4. После ставки 3 p2->right и p2->left равны NULL, когда пытаюсь присвоить их p1 то программа падает. Облазил инет код везде один и тот же. Делаю в CodeLite. Подскажите, пожалуйста, что можно сделать? |
24.07.2011, 04:33 | #2 |
Форумчанин
Регистрация: 01.07.2011
Сообщений: 423
|
Пустите свою программу в режиме пошаговой отладки и посмотрите, что делается не так.
Со мной можно встретиться на www.clipper.borda.ru
|
24.07.2011, 13:57 | #3 |
Форумчанин
Регистрация: 08.11.2010
Сообщений: 593
|
У Кормена и Вирта хороший алгоритм, посмотри их учебники!
|
24.07.2011, 17:05 | #4 |
Не
Участник клуба
Регистрация: 29.10.2009
Сообщений: 1,456
|
оформляйте код специальным тегом, вашу кашу никто смотреть не будет
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
АВЛ-Деревья | Darknes | Общие вопросы C/C++ | 0 | 08.05.2011 13:12 |
АВЛ - деревья | CodeNOT | Общие вопросы C/C++ | 3 | 06.04.2011 13:51 |
АВЛ-Дерево | Alkifr | Помощь студентам | 0 | 19.11.2010 19:21 |
проблема с бинарным деревом | Petruha-nsk | Общие вопросы C/C++ | 0 | 20.04.2009 18:33 |