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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.02.2015, 16:46   #1
Splaer
Новичок
Джуниор
 
Регистрация: 05.02.2015
Сообщений: 2
По умолчанию Бинарное дерево из массива рекурсией

С самим бинарным проблем нет, класс написан, все работает.
Задача: надо из сортированного массива построить дерево.
Вроде ничего сложного, по логике берем массив, делим его пополам, вытаскиваем центральный элемент и вставляем в дерево, и так с каждым подмассивом.

Но я видимо не до конца понял принцип работы рекурсии или просто не хватает мозгов додуматься, так как я на каждой итерации теряю правую часть массива и не знаю как мне к ней вернуться.
Помогите пожалуйста, уже мозг пухнет.

Вот то, что я написал.
Тут просто функция которая разбирает массив, конкретно к дереву отношения не имеет, я потом cout заменю на метод вставки в дерево, важен сам алгоритм.

Для ухода влево, в переменную start передается 0.

Код:

void cc(int a[], int start, int size)
{
	if (size < 0)
		return;

	int index, stop;

	if (size % 2 == 0)
		index = size / 2; 
	else
		index = size / 2 + 1; // если нечетное, то больший 

	cout << a[index] << endl;

	cc(a, 0, index - 1);


}

void main()
{
	const int size = 10;
	int a[size] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

	cc(a, 0, size);
}

Последний раз редактировалось Stilet; 06.02.2015 в 08:08.
Splaer вне форума Ответить с цитированием
Старый 05.02.2015, 19:22   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

насколько я понимаю. нужно добавить еще один вызов cc

cc(a + index, index, size - index);
или что-то вроде этого.
waleri вне форума Ответить с цитированием
Старый 05.02.2015, 22:21   #3
Splaer
Новичок
Джуниор
 
Регистрация: 05.02.2015
Сообщений: 2
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
насколько я понимаю. нужно добавить еще один вызов cc

cc(a + index, index, size - index);
или что-то вроде этого.
Да, должен быть еще один вызов и скорее всего еще какая-то конструкция, загвоздка именно в том, что я не догоняю в какой форме
Splaer вне форума Ответить с цитированием
Старый 06.02.2015, 13:32   #4
magnet
Пользователь
 
Регистрация: 02.02.2015
Сообщений: 24
По умолчанию

Цитата:
Сообщение от Splaer Посмотреть сообщение
С самим бинарным проблем нет, класс написан, все работает.
Какой класс? В коде его не видно...

Цитата:
Сообщение от Splaer Посмотреть сообщение
Задача: надо из сортированного массива построить дерево.
Где в коде строится дерево?

Цитата:
Сообщение от Splaer Посмотреть сообщение
Для ухода влево, в переменную start передается 0.
Для чего? Переменная start в коде не используется

Цитата:
Сообщение от Splaer Посмотреть сообщение
Да, должен быть еще один вызов и скорее всего еще какая-то конструкция, загвоздка именно в том, что я не догоняю в какой форме
Конечно нужен, так как его нет ты и "теряешь правую часть массива"
magnet вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Бинарное дерево Zaraaa Помощь студентам 6 05.03.2014 21:40
Бинарное дерево из массива Nicko_mt Помощь студентам 1 12.09.2011 16:57
Бинарное дерево?? energywav Общие вопросы C/C++ 2 18.12.2009 01:13
бинарное дерево СИ Anastasia.K Помощь студентам 0 31.10.2009 18:16
Бинарное дерево Lazio Общие вопросы C/C++ 2 10.09.2009 20:31