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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.12.2011, 19:49   #1
CodeNOT
Форумчанин
 
Аватар для CodeNOT
 
Регистрация: 08.11.2010
Сообщений: 593
По умолчанию проверка на то, является ли дерево поиска авл деревом

Добрый день, насколько я понял, авл дерево, это дерева у которого разность высот поддеревьев не больше 1.
В чем я идиот?
Код:
int LookAvlTree(Tree * Root)
{
	int r=0,l=0;
	if(Root!=NULL)
	{
		r=LookAvlTree(Root->right)+1;
		l=LookAvlTree(Root->left)+1;
	}
	if(abs(r-l)>1) return 0;else return 1;
}
CodeNOT вне форума Ответить с цитированием
Старый 07.12.2011, 20:19   #2
CodeNOT
Форумчанин
 
Аватар для CodeNOT
 
Регистрация: 08.11.2010
Сообщений: 593
По умолчанию

Попробовал и так:
Код:
int Height(Tree * Root)
{
	int h_r,h_l;
	if(Root!=NULL){
		h_r=Height(Root->right)+1;
		h_l=Height(Root->left)+1;
		if(h_r>h_l) return h_r;else return h_l;
	}
}
int AvlTree(Tree * Root)
{
	int res;
	if(Root!=NULL)
	{
		res=Height(Root->right)+Height(Root->left);
		if(res<-1 || res>1){return 0;}
		AvlTree(Root->right);
		AvlTree(Root->left);
	}
}
CodeNOT вне форума Ответить с цитированием
Старый 07.12.2011, 22:04   #3
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Опять похожие грабли -)
Высоту неправильно считаешь.

Код:
int Height(Tree * Root)
{
    if (Root == NULL)
        return -1;
    int h_l = Height(Root->left), h_r = Height(Root->right);
    if (h_l > h_r)
        return  h_l + 1;
    else
        return h_r + 1; 
}
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 07.12.2011, 22:07   #4
CodeNOT
Форумчанин
 
Аватар для CodeNOT
 
Регистрация: 08.11.2010
Сообщений: 593
По умолчанию

видио я мудак(
CodeNOT вне форума Ответить с цитированием
Старый 07.12.2011, 22:42   #5
CodeNOT
Форумчанин
 
Аватар для CodeNOT
 
Регистрация: 08.11.2010
Сообщений: 593
По умолчанию

В любом случае даже с правильно подсчитанной высотой, у меня авл дерево не является высотой дерева))
Код:
int Height(Tree * Root)
{
    if (Root == NULL)
       { return -1;
    }else{int h_l = Height(Root->left), h_r = Height(Root->right);
    if (h_l > h_r)
        return  h_l + 1;
    else
        return h_r + 1; 
}
}
int AvlTree(Tree * Root)
{
	int flag;
	if(Root!=NULL)
	{
		flag=Height(Root->right)+Height(Root->left);
		if(flag<-1 || flag>1){return 0;}
		AvlTree(Root->right);
		AvlTree(Root->left);
	}
}

Последний раз редактировалось CodeNOT; 07.12.2011 в 22:56.
CodeNOT вне форума Ответить с цитированием
Старый 07.12.2011, 23:09   #6
CodeNOT
Форумчанин
 
Аватар для CodeNOT
 
Регистрация: 08.11.2010
Сообщений: 593
По умолчанию

Тупняк отошел) Вот, может кому поможет)
Код:
int AvlTree(Tree * Root)
{
	if(Root==NULL)
	{
		return 0;
	}else
	{
		int h_r=AvlTree(Root->right);
		int h_l=AvlTree(Root->left);
		int h=abs(h_r-h_l);
		if(h>1) return 0;else return 1+max(h_r,h_l);
	}
}
CodeNOT вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с АВЛ деревом Anatai Общие вопросы C/C++ 3 24.07.2011 17:05
Является ли граф деревом (по поиску в ширину) Guzal Помощь студентам 0 27.04.2011 10:21
С. Программа, работающая с деревом двоичного поиска Last Помощь студентам 3 16.01.2011 21:41
АВЛ-Дерево Alkifr Помощь студентам 0 19.11.2010 19:21