![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| freed0m |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 3.12.2004 Репутация: нет Всего: нет |
Народ, беда у меня что-то я с этой рекурсией не могу разобраться
а вот сама рекурсивная функция по ЛКП:
То есть мы идем сначала до конца налево.. это единственное что я тут понял.. а как выполняется распечатка корня и ход направо не понял.. то есть мне не понятно как может вообще выполняться код ниже inorderPrint( root->left ); это же все в одном If встроено... вообщем проясните если кто сможет. И какой тут порядок действий будет...Заране благодарен! |
||||
|
|||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 19 Всего: 360 |
Попробую объяснить
Представьте себе, что функций inorderPrint на самом деле бесконечное количество То есть как только мы добрались до вызова, мы не начинаем сначала функции, а выполняем новую Ждём пока она закончится, а потом выполняем нашу до конца ПС: Всё дело в том, что функция существует как обьект и мы имеем указатель на неё, поетому можем выполнять её бесконечное количество раз |
|||
|
||||
| Fantasist |
|
||||
|
Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
Ну вот допустим, у тебя такое дерево:
Вызовы будут происходить так:
Это сообщение отредактировал(а) Fantasist - 3.12.2004, 22:49 -------------------- Волны гасят ветер... |
||||
|
|||||
| S.A.P. |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2664 Регистрация: 11.6.2004 Репутация: 9 Всего: 71 |
Просто пойми, что TreeNode - это не дерево, а только узел, причем тип узла. Дерево строиться в памяти динамически из объектов типа TreeNode (их много). Узлы связываются между собой через указатель Left и Right c другими узлами, а те в свою очередь тоже имеют указатели на узлы.
Теперь о рекурсии. Уясни для себя, что парамерты функций (в данном случае - это указатель на один из узлов) заносятся в стек друг за другом. Поэтому, если мы вызовем из inorderPrint еще один inorderPrint, то старый параметр сохраняется, но на верхушке стека теперь будет новый указатель, а когда фукция завершиться, стек сдвинется назад, и мы опять получаем преждние параметры. Вощем здесь объяснить невозможно, нужно самому понять. Можешь нарисовать на листке бумаги дерево и глядя на алгоритм пальцем водить по узлам, отмечая для себя в каком порядке они обрабатываются. А если затруднения с функцией, то можно записывать, что заносится в стек. |
|||
|
||||
| po-her |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 25.10.2004 Репутация: нет Всего: нет |
Я вот всегда, когда непонятна программа и ход действий, пытаюсь нарисовать как она работает.
Намного легче понять особенно со структурами. Все видно сразу: что куда идет и что за чем следует! |
|||
|
||||
| freed0m |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 3.12.2004 Репутация: нет Всего: нет |
Большое всем спасибо !!!!! Очень помогли
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |