![]() |
|
|
![]()
|
|
| Самозванка |
|
|||
![]() Девушка в стиле IT ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 484 Регистрация: 5.9.2006 Где: USA Репутация: нет Всего: 40 |
text Parent_text level
LENTA 1 BUDJ LENTA 2 CIK LENTA 2 OP LENTA 2 DUMMY LENTA 2 CIK1 CIK 3 CIK2 CIK 3 CIK3 CIK 3 OP1 OP 3 OP2 OP 3 CIK11 CIK1 4 CIK12 CIK1 4 CIK13 CIK1 4 Ну и так далее… Уровней вложенности может быть сколь угодно… Объясните как построить это дерево? Есть такой метод AddNode В него мы передаем номер узла и text, а метод возвращает след. номер…. Ну и соответсвенно рисует сам узел… Грубо говоря передали 1, он вернул 2… Передавать Parent text в него нельзя… ну и выстраивает взаимосвязи между узлами, то есть если в него потом опять передать тот же номер, то он на тойже ветке строить будет, а если новый - то ниже перейдет) Я хотела делать цикл по этому табличке и потом по смене Parentteext пускать метод))) – это всё в одну папку хреначится тогда) Это сообщение отредактировал(а) Самозванка - 17.12.2008, 20:30 |
|||
|
||||
| SoWa |
|
|||
![]() Харекришна ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2422 Регистрация: 18.10.2004 Репутация: 6 Всего: 74 |
Если я не ошибаюсь- каждый элемент поля text будет являться и предком, и потомком. Кроме первого элемента. Он не является потомком.
То, что в поле Parent_text указывает на предка. Поэтому не вижу ничего сложного кроме реализации. Для твоего примера- поле Parent_text даже упорядочено. Поэтому делаем так:
Ставим во главу дерева LENTA Далее ищем по полю Parent_text все поля, которые являются потомками Ленты. Выставляем их в дерево на второй уровень. Теперь начинаем просматривать каждый из этих 4 потомков, уже считая их предками. Ищем потомков для них- они имеют в поле Parent_text свое название, и при этом уровень вложености 3. Уровень вложенности более 3 не будем проверять, ибо иметь на 2 уровне потомка 4 и более уровня в принципе невозможно. Таким образом, мы выстроили еще одну горизонтальную линию дерева. И для нее повторяем операцию, лишь увеличив проверяемый уровень вложенности. А с вопросом реализации- это уже в раздел конкретного языка -------------------- Всем добра |
|||
|
||||
| Самозванка |
|
|||
![]() Девушка в стиле IT ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 484 Регистрация: 5.9.2006 Где: USA Репутация: нет Всего: 40 |
SoWa, Это то я всё понимаю, спасибо, но тема в том... вот к примеру нашли мы все потомки Ленты... нам надо идти от каждого к след потомку....
Потому что метод стандартный AddNode работает так... Первый раз для него передается "", для создания корневой папке... а потом он на выходе всегда получает key для следующего уровня...передаю туда Lenta и ' ' - верхний уровень (на выходе 1), затем передаю след запись OP и 1(которую я при прошлом запуске метода получила) - получилось OP - вложенный раздел LENTA... То есть пусть я нашла все потомку Ленты и передала им key = 1, типа как след уровень... а теперь если нахожу для OP потомков, и передаю им key = 3, то они записываются в последнюю text потомков Ленты... вот как то так, а надо чтоб каждый в свой корень записался... нужна какая то хитроумная рекурсия видимо - не сообразить что то... Это сообщение отредактировал(а) Самозванка - 17.12.2008, 21:56 |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 1 Всего: 146 |
не сильно понятно с объяснением но я бы строил по уровнево
корневое потом все 1 уровня потом все 2 уровня ... учитывая все вложености и т.д. можно еще рекурсией построил 1 уровня элемент , есть ли у него 2 уровень есть строим 2 уровень есть ? да - строим 3 уровень .... , нет строим 2 уровень соселний если есть , нет 1 уровень соседний и т.п. -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| Самозванка |
|
|||
![]() Девушка в стиле IT ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 484 Регистрация: 5.9.2006 Где: USA Репутация: нет Всего: 40 |
Мы идем до 1 ого потомка Лента, далее сразу ищем потомка этого потомка, и так далее пока не найдем такого потомка, потом возвращаем к предыдущему потомку...и так далее.... блин как то так... но так как я это делаю по циклу, не понимаю как тут не запутаться.
Помоги плиз структурировать мысль) Добавлено через 50 секунд Romikgy, да, именно так можно еще рекурсией построил 1 уровня элемент , есть ли у него 2 уровень есть строим 2 уровень есть ? да - строим 3 уровень .... , нет строим 2 уровень соселний если есть , нет 1 уровень соседний и т.п. |
|||
|
||||
| SoWa |
|
|||
![]() Харекришна ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2422 Регистрация: 18.10.2004 Репутация: 6 Всего: 74 |
Такс, кажется вкурил
И значит, метод построчного построения неприемлим. Тогда надо строить поветочно. Итак. Есть предок. Главный батька такой. Ищем всех его потомков. Нашли. Круто! Не рвемся в бой и не добавляем всех сразу. Добавляем только одного. Ищем всех его потомков. Нашли. Круто! Не рвемся в бой и не добавляем всех сразу. Добавляем только одного. Ищем всех его потомков итд Рекурсия, да, нужно, но я с ней не смогу помочь- я её не люблю и не умею ^_^ Судя по всему будет функция вида:
Как-то так. Мб даже и понятно -------------------- Всем добра |
|||
|
||||
| Самозванка |
|
|||
![]() Девушка в стиле IT ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 484 Регистрация: 5.9.2006 Где: USA Репутация: нет Всего: 40 |
SoWa, спасибо огромное, тебя люблю, а рекусрию видимо тоже теперь не люблю... фу..
Тему пока не закрываю, напишу точный алгоритм - отпишусь... |
|||
|
||||
| SoWa |
|
|||
![]() Харекришна ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2422 Регистрация: 18.10.2004 Репутация: 6 Всего: 74 |
Попробуй её почеркать на бумажке в виде квадратиков(кружочков, сердечек и пр.) и стрелочек
-------------------- Всем добра |
|||
|
||||
| Самозванка |
|
|||
![]() Девушка в стиле IT ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 484 Регистрация: 5.9.2006 Где: USA Репутация: нет Всего: 40 |
Написала)) на ABAP... но думаю кому вдруг пригодится - поймут
И запускаем эту perform get_level using space spaсе Я люблю рекурсию! |
|||
|
||||
| SoWa |
|
|||
![]() Харекришна ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2422 Регистрация: 18.10.2004 Репутация: 6 Всего: 74 |
-------------------- Всем добра |
|||
|
||||
| Фыва |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 16.12.2008 Репутация: нет Всего: нет |
А рекурсия любит переполнение стэка проверку на максимальный уровень вложенности поставьте хотя-бы. |
|||
|
||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |