![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
aktuba |
|
|||
![]() Смышленный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1915 Регистрация: 24.4.2006 Где: Планета Земля Репутация: 16 Всего: 38 |
Совсем перестал соображать, поможете?
Задача такая. Есть заполненное дерево. Пример: Исходное дерево: +Узел1 | +Узел2(!) | | | +Узел3(!) | | | +Узел4 | +Узел5 | | | +Узел6(!) | +Узел7(!) На основе этого дерева необходимо получить следующее: +Узел2(!) | | | +Узел3(!) | +Узел6 | +Узел7(!) Есть идеи? Это сообщение отредактировал(а) aktuba - 24.1.2007, 17:38 -------------------- ![]() |
|||
|
||||
voha |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 22.1.2007 Где: Артемовск Репутация: нет Всего: нет |
Рекурсия поможет
|
|||
|
||||
aktuba |
|
|||
![]() Смышленный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1915 Регистрация: 24.4.2006 Где: Планета Земля Репутация: 16 Всего: 38 |
voha, это я и сам знаю. Я не могу понять, как определять (или передавать) Parent добавляемого узла...
-------------------- ![]() |
|||
|
||||
voha |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 22.1.2007 Где: Артемовск Репутация: нет Всего: нет |
TNode.Parent
AddChild или давай подробней |
|||
|
||||
aktuba |
|
|||
![]() Смышленный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1915 Регистрация: 24.4.2006 Где: Планета Земля Репутация: 16 Всего: 38 |
voha, посмотри внимательно верхний пример. Узел6 добавить необходимо, но Узел5 добавлять нельзя. Как определить в какой узел его теперь добавлять?
-------------------- ![]() |
|||
|
||||
Bose |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1458 Регистрация: 5.3.2005 Где: Riga, Latvia Репутация: 23 Всего: 51 |
тогда добавляй в Узел5.Parent или(уже не по примеру), если в Узел5.Parent нельзя, то в Узел5.Parent.Parent p.s. на некорректно заданный вопрос нельзя получить корректный ответ ![]() |
|||
|
||||
voha |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 22.1.2007 Где: Артемовск Репутация: нет Всего: нет |
запоминать последний добавленный узел, если последний добавленный = nil, значит добавляем в корень,
при переключении на следующий корневой Node в исходном дереве сбрасывать ссылку на последний добавленный узел ну если опять не то, тогда сдаюсь ![]() |
|||
|
||||
aktuba |
|
||||
![]() Смышленный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1915 Регистрация: 24.4.2006 Где: Планета Земля Репутация: 16 Всего: 38 |
Bose, и как определить в рекурсии это?
Вопрос задан корректно, прочитан не корректно ![]() voha,
Наверное не в корень, а в Parent Parent-а, если он вставлен и т.д. Но как узнать, вставлен или нет? -------------------- ![]() |
||||
|
|||||
Bose |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1458 Регистрация: 5.3.2005 Где: Riga, Latvia Репутация: 23 Всего: 51 |
Очень просто:
Проверяй, если у узла есть восклицательный знак (!) в скобках, значит он вставлен, если знака нет - значит не вставлен. ![]() |
||||
|
|||||
aktuba |
|
|||
![]() Смышленный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1915 Регистрация: 24.4.2006 Где: Планета Земля Репутация: 16 Всего: 38 |
Bose, если не хочешь вникать в задачу - лучше не надо ничего писать, хорошо?
Для всех остальных, пояснение. Есть исходное заполненное дерево. Из этого дерева необходимо по определенному условию выбрать узлы и их копии добавить в новое дерево, с сохранением структуры исходного дерева. Т.е., для исходного дерева вида +Узел1 | +Узел2(!) | | | +Узел3(!) | | | +Узел4 | +Узел5 | | | +Узел6(!) | | | +Узел7(!) | | | +Узел8 | | | +Узел9(!) | +Узел10(!) необходимо получить новое дерево +Узел2 | | | +Узел3 | +Узел6 | | | +Узел7 | | | +Узел9 | +Узел10 Для тех, кто читает через строку, поясняю. (!) - это просто показываю, какие узлы подходят под условие. Необходимо написать функцию, которая это делает. Кто поможет? Это сообщение отредактировал(а) aktuba - 24.1.2007, 19:52 -------------------- ![]() |
|||
|
||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 62 Всего: 128 |
как я понял, тебе нужно собрать всех первых детей?
нет. все нечетные ноды? опять нет. лично я не вижу никакой закономерности в выборе нодов. парт.задание автору - составить внятный алгоритм "фильтрации" нодов Это сообщение отредактировал(а) MetalFan - 24.1.2007, 20:19 -------------------- There are always someone smarter than you... |
|||
|
||||
aktuba |
|
|||
![]() Смышленный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1915 Регистрация: 24.4.2006 Где: Планета Земля Репутация: 16 Всего: 38 |
Всех нодов, для которых выполняется определенное условие. И поменяй стиль общения, ок? P.S.: специально для Metalfan-a: добавить в новое дерево узлы, для которых выполняется одно из следующих условий: 1. присутствует дата окончания задания и сегодняшняя дата попадает в промежуток между началом задания и окончанием задания; 2. присутствует дата окончания задания, но сегодняшняя дата НЕ попадает в промежуток между началом задания и окончанием задания, и указан флаг переноса просроченных заданий; 3. отсутствует дата окончания и сегодняшняя дата = дате начала задания. Легче стало? Это сообщение отредактировал(а) aktuba - 24.1.2007, 21:06 -------------------- ![]() |
|||
|
||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 62 Всего: 128 |
aktuba, ты за своим стилем следи, ок? метод огрызания на всех тоже не очень хорош ;)
тут никто не понял, что тебе надо. а вот про это в начале ни слова не было -------------------- There are always someone smarter than you... |
|||
|
||||
aktuba |
|
||||
![]() Смышленный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1915 Регистрация: 24.4.2006 Где: Планета Земля Репутация: 16 Всего: 38 |
MetalFan, это не огрызания...
Вот это издевательство. Вместо того чтобы спросить то, что не ясно - подколы... И если отвечаешь на вопрос - будь добр посмотреть другие ответы и вопросы, а не только верхний...
А ты отвечаешь только на первый пост? Это сообщение отредактировал(а) aktuba - 24.1.2007, 21:14 -------------------- ![]() |
||||
|
|||||
Bose |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1458 Регистрация: 5.3.2005 Где: Riga, Latvia Репутация: 23 Всего: 51 |
Я хочу. Просто у меня не получалось понять =) Вот пример в псевдокоде:
В VirtualTree узлы перебирются по-другому, к сожалению не помню точного синтаксиса, а вспоминать нет времени. Просто замени цикл for..do обхода на правильный(с использованием GetFirst,GetNext). Написать функцию function GetCopyFromNode(aNode:TVirtualNode):TVirtualNode; которая создаст экземпляр копии узла и вернёт указатель на него Конечно это не готовый ответ, но надеюсь, что этот код придаст верное направление твоим размышлениям. Добавлено @ 21:47 p.s. УсловиеВыполняется - функция, которая возварщает True, если для данного узла выполняются необходимые условия. |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |