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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.11.2016, 22:27   #11
Bombucho
Пользователь
 
Регистрация: 03.11.2016
Сообщений: 10
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
1) Самый правый элемент является листом, т.е. у него нет и левого поддерева.
Тогда просто в левое поддерево ему суём текущий корень и назначаем максимум корнем (не забываем удалить максимум из правого поддерева его корня)
а вот замену нужно описать в int main()?
не совсем понял как, но вот набросок сделал...
int v;
...
if(true)
{
v=max->info;
max-> info=t->info;
t->info=v;
}
Bombucho вне форума Ответить с цитированием
Старый 16.11.2016, 07:52   #12
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

У меня как-то так получилось:
Код:
void shuffle(node **root)
{
	if ((*root)->r == NULL)	// Корень самый правый элемент, т.е. уже является максимумом
		return;	// ничего не делаем

	node *preMax = *root;	// "родитель" максимального элемента
	node *max = preMax->r;	// максимальный элемент - самый правый элемент дерева
	while (max->r != NULL)
	{
		preMax = max;
		max = preMax->r;
	}

	preMax->r = NULL;	// Убираем ссылку у "родителя" максимального элемента

	if (max->l == NULL)	// Максимальный элемент - "лист" (нет ни левого, ни правого поддерева)
	{
		max->l = *root;		// Текущий корень прописываем левым поддеревом максимального элемента
	}
	else
	{	// У максимального элемента есть левое поддерево
		// "Корень" помещаем в левое поддерево самого левого элемента
		node *min = max->l;
		while ( min->l != NULL)
		{
			min = min->l;
		}
		min->l = *root;
	}

	*root = max;
}
...
int main()
{
	...
	shuffle(&tree);
	cout << "Дерево после перестановки элементов" << endl;
	print(tree, 0);
	return 0;
}
pu4koff вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Высота бинарного дерева dido171 Помощь студентам 4 02.12.2014 13:30
Построение бинарного дерева LordAlex91 Общие вопросы C/C++ 2 18.02.2012 15:49
!!! ОБХОДЫ БИНАРНОГО ДЕРЕВА !!! aleks.halk Помощь студентам 0 03.04.2011 01:08
Создания бинарного дерева С++ Olya90 Помощь студентам 0 10.06.2009 18:58
Операции над максимальными элементами масссива ( С ) Dest Общие вопросы C/C++ 4 14.05.2009 17:50