Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Деревья


Автор: Forpost 1.7.2012, 16:42
Здравствуйте.
Уважаемые коллеги, подскажите, пожалуйста, решение задачи.
Необходимо создать взвешенное дерево(т.е. каждая связь будет есть свой вес=числовое значение).
Необходимо иметь возможность добавлять наследника, указав номер родителя. 

Автор: Forpost 4.7.2012, 09:35
Появилась следующая идея реализации:
Создаём два массива:
1. Двумерный массив, первый индекс которого отвечает за уровень вложенности; второй индекс отвечает за те элементы, которые находятся на текущем уровне.
2. Двумерный массив отношений. $relations[parent's_index][son's_index]=вес связи.

Однако, как при такой структуре получить массив всех элементов, которые входят в поддерево родителя K? К может быть и корнем дерева, и листьями, и любым другим значением. 

Автор: Fortop 4.7.2012, 15:26
А чем дерево отличается от списка?

Автор: aleks2020 4.7.2012, 15:29
Одного массива хватит, если не ошибаюсь.

Автор: Forpost 5.7.2012, 08:13
Цитата

Одного массива хватит, если не ошибаюсь. 

Может быть и хватит. Только я не нашел решение с одним массивом.
Цитата

А чем дерево отличается от списка? 

Тем что у одного родителя может быть несколько потомков.

Автор: Fortop 5.7.2012, 12:02
Цитата(Forpost @  5.7.2012,  08:13 Найти цитируемый пост)
Тем что у одного родителя может быть несколько потомков. 

Хорошо.

А чем дерево отличается от списка списков списков списков .... и т.д.?

Автор: MaXL 9.7.2012, 07:11
Forpost, вес может быть нулевым ?

что вам мешает написать http://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%B8%D1%81%D0%BA_%D0%B2_%D1%88%D0%B8%D1%80%D0%B8%D0%BD%D1%83 или http://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%B8%D1%81%D0%BA_%D0%B2_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%83, начиная с выбранной вершины ?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)