Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.04.2011, 12:59   #1
CodeNOT
Форумчанин
 
Аватар для CodeNOT
 
Регистрация: 08.11.2010
Сообщений: 593
По умолчанию АВЛ - деревья

Всем привет, в общем решил поработать со сбалансированными деревьями, а в частности с АВЛ, но столкнулся с проблемкой, когда при добавлении пытаюсь сделать балансировку, она у меня не совершается, т.е. флаг принимает значение true, а в условие он не входит. Объясните пожалуйста в чем я ошибся, вот код:
Код:
void Insert_And_Balance(Tree &Root,int Key,bool Flag)
{
	Tree HelpTree1,HelpTree2;
	if(Root==NULL)
	{
		Tree Element=new AVL_Tree;
		Element->Left=NULL;
		Element->Right=NULL;
		Element->Key=Key;
		Element->Bal=0;
		Root=Element;
		Flag=true;
		cout<<"Result: Element ADD "<<endl;
	}else
	{
		if(Key<Root->Key)
		{
			Insert_And_Balance(Root->Left,Key,Flag);
					if(Flag)
					{
						switch(Root->Bal)
						{
							case 1:Root->Bal=0;Flag=false;break;
							case 0:Root->Bal=-1;break;
							case -1:
								//Balansing
									HelpTree1=Root->Left;
									if(HelpTree1->Bal==-1)
									{
											//LL povorot
										Root->Left=HelpTree1->Right;
										HelpTree1->Right=Root;
										Root->Bal=0;
										Root=HelpTree1;
									}else
									{
										//LR povorot;
										HelpTree2=HelpTree1->Right;
										HelpTree1->Right=HelpTree2->Left;
										HelpTree2->Left=HelpTree1;
										Root->Left=HelpTree2->Right;
										HelpTree2->Right=Root;
											if(HelpTree2->Bal==-1)
											{
												Root->Bal=1;
											}else
											{
												Root->Bal=0;
											}
											if(HelpTree2->Bal==1)
											{
												HelpTree1->Bal=-1;
											}else
											{
												HelpTree1->Bal=0;
											}
									Root=HelpTree2;
								}
						Root->Bal=0;
						Flag=false;
					}
			}
		}
		if(Key==Root->Key)
		{
			cout<<"Result: Element THERE"<<endl;
		}
		
		
		
		
}

Последний раз редактировалось CodeNOT; 06.04.2011 в 13:50.
CodeNOT вне форума Ответить с цитированием
Старый 06.04.2011, 13:39   #2
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Вы не правильно понимаете правила форума.
Для ПОМОЩИ надо передоставлять не ВЕСЬ код, а ПРОБЛЕММНУЮ часть.
Что-бы разобраться со всем кодом, нужно много времени, а это БЕСПЛАТНО никто делать не будет.
Или приводите проблеммную часть, или во "ФРИЛАНС". Там, за денюжку, Вам обязательно помогут.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 06.04.2011, 13:51   #3
CodeNOT
Форумчанин
 
Аватар для CodeNOT
 
Регистрация: 08.11.2010
Сообщений: 593
По умолчанию

ок извините, поправил, проблема в том, что у меня не идет проверка флага, и я не знаю в чем дело(
CodeNOT вне форума Ответить с цитированием
Старый 06.04.2011, 13:51   #4
CodeNOT
Форумчанин
 
Аватар для CodeNOT
 
Регистрация: 08.11.2010
Сообщений: 593
По умолчанию

или может я балансировку вообще не так делаю?
CodeNOT вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
АВЛ-Дерево Alkifr Помощь студентам 0 19.11.2010 19:21
VB. Деревья. TimonCer Помощь студентам 4 25.06.2010 23:30
С++ Деревья DenSyntax Фриланс 3 24.06.2010 16:50
Деревья Марат707 Microsoft Office Word 1 07.12.2008 14:24