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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.04.2016, 23:25   #1
fswl
Новичок
Джуниор
 
Регистрация: 10.04.2016
Сообщений: 2
По умолчанию Бинарное дерево (Java)

Здравствуйте,

помогите пожалуйста реализовать алгоритм формирования бинарного дерева из массива.

Правило формирования следующие, корнем дерева является элемент стоящий посередине массива. Если количество элементов четное, то берется элемент следующий после середины массива. К примеру у массива [1,2,3,4,5] корнем будет 3, у массива [1,2,3,4] корнем так же будет 3.

после того как мы нашли корень, наш массив получается делится на два "подмассива", корни соответствующих поддеревьев ищутся аналогично корню искомого дерева.

Элементы которые стоят в массиве слева, в дереве так же располагаются слева, аналогично с элементами стоящими справа от корня.

Пример дерева



Значения элементов массива на построение дерева никак не влияет, имеет значение только позиция элемента, поэтому в примерах для простоты значения элементов совпадают с их позицией


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

Спасибо.
fswl вне форума Ответить с цитированием
Старый 11.04.2016, 07:49   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,708
По умолчанию

А что не получается? Все ж описано...
p51x вне форума Ответить с цитированием
Старый 11.04.2016, 10:52   #3
fswl
Новичок
Джуниор
 
Регистрация: 10.04.2016
Сообщений: 2
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
А что не получается? Все ж описано...
не получается придумать как этот алгоритм "технически реализовать".

Пока схема в голове примерно такая.

Пишем функцию getmiddle которая будет возвращать индекс узла, на вход функции подается массив.

далее необходимо придумать цикл в котором сначала находим первый узел.
Потом разбиваем массив на 2 подмассива и находим их центры. В итоге у нас узел и его правый и левый потомок.

Вопрос, какое придумать условие цикла?
Как разбивать массив на подмассивы? через промежуточные переменные?
и т.д.

П.С. Сорри за возможно глупые вопросы, но в программировании я совсем новичок
fswl вне форума Ответить с цитированием
Старый 11.04.2016, 11:21   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,708
По умолчанию

Есть "магическое слово" рекурсия... Например, берете ноде функция(массив). В ней вы привязываете потомков и возвращаете узел для середины.
p51x вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Бинарное дерево Амэ Общие вопросы 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