adsl club

Справочник

Форум

Программы

Фильмы

Ресурсы

Файлообмен

Хостинг

Ростелеком
Нужна помощь
Ответить на тему    Форум АДСЛ КлубаЦИФРОВОЙ ФЛЕЙМ :)ПРОГРАММИРОВАНИЕ
Автор Сообщение
Shining ninja
Гуру
СообщениеДобавлено: Вт 14-10-08 : 16-59    Заголовок сообщения: Нужна помощь Ответить с цитатой

Значит проблема вот в чем когда я забиваю последовательными числами два дерева(BST и AVL) - то прога валится - помогите плиз...

void main( )
{
locale::global(locale("rus"));
BSTree <long int,long int> BSTree_int; //Создаем BST-дерево
AVLtree <long int,long int> AVLree_int; //Создаем AVL-дерево

......................................
case 2:
{
system("cls");
long int k=0,test=0,tes=0,bins=0,bdel=0,bfin=0,ains=0,adel=0,afin=0;
cout<<"Введите размер дерева: "<<endl;
cin>>test;
long int inf=0, val=0;
long int *M=NULL;
M=new long int[test];
for(k=1; k<test; k++)
{
BSTree_int.InsertB(1,k);
AVLree_int.InsertA(1,k,0);
M[k]=k;
}
..........................

я их забиваю для того чтобы протестить прогу
вот сами вставки:

Elem_BSTree *InsertBST (Elem_BSTree *n,T d,T1 k) //Включение данных с заданным ключом
{
count++;
if (root)
{
if (n==NULL) {n=new Elem_BSTree(d,k);hi=true;return n;}
if (k==n->key) return n;
if (k<n->key) n->left=InsertBST(n->left,d,k);
else n->right=InsertBST(n->right,d,k);
}
else
{
root=new Elem_BSTree(d,k);
hi=true;
}
return n;
}


bool InsertAVL(Elem_BSTree *&n,T d,T1 k,bool h) //Вставка в AVL-дерево
{
Elem_BSTree *p1;
Elem_BSTree *p2;
count++;

if (n==NULL) // Включение
{
n=new Elem_BSTree(d,k);
h=true;hi=true;
n->bal=0;
}
else if (k<n->key) // Поиск слева
{
h=InsertAVL(n->left,d,k,h);
if (h) // Выросла левая ветвь
switch (n->bal)
{
case 1: n->bal=0;h=false;break;
case 0: n->bal=-1;break;
case -1: // Балансировка
p1=n->left;
if (p1->bal==-1) // Однократный поворот вправо
{
n->left=p1->right;p1->right=n;n->bal=0;n=p1;
}
else // Двойной поворот: влево, вправо.
{
p2=p1->right;
p1->right=p2->left;
p2->left=p1;
n->left=p2->right;
p2->right=n;
// Коррекция баланса
if (p2->bal==-1) n->bal=1; else n->bal=0;
if (p2->bal==1) p1->bal=-1; else p1->bal=0;
n=p2;
}
n->bal=0;h=false;
break;
}
}
else if (k>n->key) // Поиск справа (при равенстве возможно одинаковые элементы)
{
h=InsertAVL(n->right,d,k,h);
if (h) // Выросла правая ветвь
switch (n->bal)
{
case -1: n->bal=0;h=false;break;
case 0: n->bal=1;break;
case 1: // Балансировка
p1=n->right;
if (p1->bal==1) // Однократный поворот влево
{
n->right=p1->left;p1->left=n;n->bal=0;n=p1;
}
else // Двойной поворот: вправо, влево
{
p2=p1->left;
p1->left=p2->right;
p2->right=p1;
n->right=p2->left;
p2->left=n;
// Коррекция баланса
if (p2->bal==1) n->bal=-1; else n->bal=0;
if (p2->bal==-1) p1->bal=1; else p1->bal=0;
n=p2;
}
n->bal=0;h=false;
break;
}
}
return h;
}
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение Отправить e-mail   Номер ICQ
Показать сообщения:   
Ответить на тему    Форум АДСЛ КлубаЦИФРОВОЙ ФЛЕЙМ :)ПРОГРАММИРОВАНИЕ Часовой пояс: GMT + 7
Страница 1 из 1

 

 
Аватары: Вкл|Выкл   ЮзерИнфо: Вкл|Выкл   Подписи: Вкл|Выкл
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы можете скачивать файлы