![]() |
как красиво дерево обойти
есть дерево с неизвестным уровнем вложенности(знаем его корень), подскажите оптимальный алгоритм для решения такой задачи -
1 - нужно элемент расположеныый на самом верхнем уровне 2 - от верхнего элемента дойти до корня перебрав все элементы данного дерева возможно ли обойтись без 2-х рекурсий откомпилите исходник(добавив предварительно в либаре баттон) в режиме отладки и немного пожмакав эту самую кнопочку, вы увидете то самое дерево (его корень ...c_mc.inp), которое надо обойти, и не ругайте меня за выделение функций в класс Draw(понимаю, что можно было обойтись и #include) Другие замечания приветствуются у меня перебор от корня к верхнему элементу - работает криво |
По-моему, достаточно вообще одной рекурсии.
|
__etc - поясни, как обойтись одной, тут уже красота кода, черт с ней, мне пока что б заработало, писал под две рекурсии вот первая - должна искать верхний "уровень"
Код:
function heard(l_mc:MovieClip):MovieClip{есть главный мув на нем еще два - один(на нем создаются мувы с TextField), - второй(на нем будут мувы для рисования знаков дроби, корня и т.д.), вот на если у нас рисуется дробь, то на первом муве создается пустой мув, на нем еще два с текстовыми полями, если в поле находится курсор и добавить еще одну дробь - на предке этого поля создастса еще один мув с двумя другими+TextField, и т.д. степень вложенности зависит от извращенности пользователя, дак вот надо найти самый верхний, для чего служит функция heard, но она рекурсивная из нее формируется стек, т.е последний блок выполняется первым, и результатом является мув возрашенный первым блоком(последним выполненым), а мне требо, чтоб последним(который выполняется первым). - надеюсь не доконца всех запутал, проще в исходнике посмотреть структуру клипов. |
А зачем второй вложенный цикл?
Рекурсия у тебя одна — собственно, вызов heard. |
1 - ну выше я пытался описать зачем, у меня два типа мувов, одни для создания сложных элементов а на других расположены эти элементы, вот мне нужны последние
2-это я только нахожу верхний мув, а надо еще от него дойти еще обратно до корня(с верху вниз без проблем, с подъемом сложности) ...,не функция находит ерунду, совсем не то что требоо, а как объяснить что она должна искать не представляю, покамест господа флешеры забейте, автор забыл что он должен искать... |
искать надо мув расположенный на самом верхнем уровне, как это сделать пробовал так:
Код:
function heard(l_mc:MovieClip):MovieClip{------ |
все дело в return прекращающем выполнение функции, а есть ли аналог result'a в AS как иначе результату значению возвращаемому функцией присвоить что-то и продолжить ее выполнение?
|
А куда ты, собственно, элемент возвращаешь?
|
ты про if не знаю куда и кому, но если писать просто heard(el); без return то рекурсия вообще не работает
|
черт с этим моим кодом, сам запутался и другим разобраться мешаю, задача:
мув, на нем еще несколько мувов, на них мувы еще и т.д. как найти самый верхний мув и еще кроме мувов там могут быть текстовые поля - каждым листом дерева будет TextField |
такой вариант почти работает
Код:
function heard(l_mc:MovieClip):MovieClip{------ моих знаний AS и вообще ООП тут явно не хватает, поможите люди добрые |
| Часовой пояс GMT +4, время: 07:33. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.