![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 10.04.2016
Сообщений: 2
|
![]()
Здравствуйте,
помогите пожалуйста реализовать алгоритм формирования бинарного дерева из массива. Правило формирования следующие, корнем дерева является элемент стоящий посередине массива. Если количество элементов четное, то берется элемент следующий после середины массива. К примеру у массива [1,2,3,4,5] корнем будет 3, у массива [1,2,3,4] корнем так же будет 3. после того как мы нашли корень, наш массив получается делится на два "подмассива", корни соответствующих поддеревьев ищутся аналогично корню искомого дерева. Элементы которые стоят в массиве слева, в дереве так же располагаются слева, аналогично с элементами стоящими справа от корня. Пример дерева ![]() Значения элементов массива на построение дерева никак не влияет, имеет значение только позиция элемента, поэтому в примерах для простоты значения элементов совпадают с их позицией Необходимо описать дерево в виде массива узлов, где у каждого узла указывается его значение и ссылки на левый и правый потомок Спасибо. |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,830
|
![]()
А что не получается? Все ж описано...
|
![]() |
![]() |
![]() |
#3 |
Новичок
Джуниор
Регистрация: 10.04.2016
Сообщений: 2
|
![]()
не получается придумать как этот алгоритм "технически реализовать".
Пока схема в голове примерно такая. Пишем функцию getmiddle которая будет возвращать индекс узла, на вход функции подается массив. далее необходимо придумать цикл в котором сначала находим первый узел. Потом разбиваем массив на 2 подмассива и находим их центры. В итоге у нас узел и его правый и левый потомок. Вопрос, какое придумать условие цикла? Как разбивать массив на подмассивы? через промежуточные переменные? и т.д. П.С. Сорри за возможно глупые вопросы, но в программировании я совсем новичок |
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,830
|
![]()
Есть "магическое слово" рекурсия... Например, берете ноде функция(массив). В ней вы привязываете потомков и возвращаете узел для середины.
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Бинарное дерево | Амэ | Общие вопросы C/C++ | 0 | 08.06.2015 18:15 |
Бинарное дерево | Alexsandr | Visual C++ | 0 | 05.06.2012 18:30 |
Бинарное дерево! | pawel32 | Помощь студентам | 3 | 14.11.2011 22:40 |
Бинарное дерево | Viktor19764 | Помощь студентам | 1 | 05.11.2011 23:21 |
Бинарное дерево | g0liath | Помощь студентам | 2 | 16.02.2008 23:54 |