![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| freshAngel |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 248 Регистрация: 1.10.2008 Репутация: нет Всего: нет |
Привет.
Необходимо построить дерево типа: [-] Root [-] Категория 1 [-] Категория 1.1 [-] Категория 1.1.1 [-] Категория 1.1.1.1 В каком контейнере лучше хранить информацию для построения данного дерева!? |
|||
|
||||
| jk1 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 21 Всего: 75 |
Можно использовать для хранения саму структуру узлов дерева, то есть хранить ссылку на root. Очень удобно наличием методов обхода в ширину и в глубину любого поддерева.
-------------------- Opinions are like assholes — everybody has one |
|||
|
||||
| freshAngel |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 248 Регистрация: 1.10.2008 Репутация: нет Всего: нет |
Хранить ссылку на root?
Я хотел воспользоваться контейнером по причине того, что после вывода дерева его структура будет меняться (будут добавляться, изменяться, удаляться узлы). Поэтому, например при добавлении узлов, что-бы проверить есть узел с таким-же названием или нет удобнее воспользоваться контейнером чем обходить дерево. |
|||
|
||||
| jk1 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 21 Всего: 75 |
Что касается удобства, то в обоих случаях вам дадут итератор, разницы никакой. Единственное что можно выиграть на контейнере - производительность при поиске. Контейнер выбирается под конкретную задачу: если требуется проверить существование в дереве объекта с полем name=="Вася", тогда складывайте объеткы дополнительно в Set, а в методе equals укажите сравнение по этому полю. Вывод: хотите оптимизации, указывайте требования. Наример: "нужен поиск по трем строковым полям за О(n)". -------------------- Opinions are like assholes — everybody has one |
|||
|
||||
| freshAngel |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 248 Регистрация: 1.10.2008 Репутация: нет Всего: нет |
Производительность в данном случае не важна.
А как потом обойти дерево!? |
|||
|
||||
| jk1 |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 21 Всего: 75 |
Если необходимо выполнить обход дерева в глубину, то
если нужен обход в ширину, то
а дальше итерируемся по полученному Enumeration:
-------------------- Opinions are like assholes — everybody has one |
||||||
|
|||||||
| Deo |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 24.3.2010 Репутация: нет Всего: нет |
Привет.
А кто может подсказать такое. Есть первый цикл в котором определяются главные ветки дерева (родители):
Потом второй цикл, в котором нужно к родителю прикрепить детей. (типа 1.1 к 1)
И третий цикл, в котором нужно прикрепить новые ноды к предыдущему родителю! (типа 1.1.1.1 к 1.1.1) Это сообщение отредактировал(а) Deo - 26.3.2010, 09:33 |
||||
|
|||||
| jk1 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 21 Всего: 75 |
Самым оптимальным решением будет вложить циклы друг в друга.
Это сообщение отредактировал(а) jk1 - 26.3.2010, 09:49 -------------------- Opinions are like assholes — everybody has one |
|||
|
||||
| Deo |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 24.3.2010 Репутация: нет Всего: нет |
Спасибо за совет. У меня сейчас все работает на перезаписи ветки нодов: Ветка 1 Добавляем ветку 2 Потом ведущей становится ветка 2 и по технологии: Ветка 2 Добавляем ветку 3 и т.д. Попробую Ваш способ. Это сообщение отредактировал(а) Deo - 26.3.2010, 09:49 |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |