| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Рекурсия и бинарные деревья |
| Автор: freed0m 3.12.2004, 22:21 | ||||
Народ, беда у меня что-то я с этой рекурсией не могу разобраться
а вот сама рекурсивная функция по ЛКП:
То есть мы идем сначала до конца налево.. это единственное что я тут понял.. а как выполняется распечатка корня и ход направо не понял.. то есть мне не понятно как может вообще выполняться код ниже inorderPrint( root->left ); это же все в одном If встроено... вообщем проясните если кто сможет. И какой тут порядок действий будет...Заране благодарен! |
| Автор: sergejzr 3.12.2004, 22:39 |
| Попробую объяснить Представьте себе, что функций inorderPrint на самом деле бесконечное количество То есть как только мы добрались до вызова, мы не начинаем сначала функции, а выполняем новую Ждём пока она закончится, а потом выполняем нашу до конца ПС: Всё дело в том, что функция существует как обьект и мы имеем указатель на неё, поетому можем выполнять её бесконечное количество раз |
| Автор: Fantasist 3.12.2004, 22:47 | ||||
Ну вот допустим, у тебя такое дерево:
Вызовы будут происходить так:
|
| Автор: S.A.P. 3.12.2004, 23:10 |
| Просто пойми, что TreeNode - это не дерево, а только узел, причем тип узла. Дерево строиться в памяти динамически из объектов типа TreeNode (их много). Узлы связываются между собой через указатель Left и Right c другими узлами, а те в свою очередь тоже имеют указатели на узлы. Теперь о рекурсии. Уясни для себя, что парамерты функций (в данном случае - это указатель на один из узлов) заносятся в стек друг за другом. Поэтому, если мы вызовем из inorderPrint еще один inorderPrint, то старый параметр сохраняется, но на верхушке стека теперь будет новый указатель, а когда фукция завершиться, стек сдвинется назад, и мы опять получаем преждние параметры. Вощем здесь объяснить невозможно, нужно самому понять. Можешь нарисовать на листке бумаги дерево и глядя на алгоритм пальцем водить по узлам, отмечая для себя в каком порядке они обрабатываются. А если затруднения с функцией, то можно записывать, что заносится в стек. |
| Автор: po-her 3.12.2004, 23:15 |
| Я вот всегда, когда непонятна программа и ход действий, пытаюсь нарисовать как она работает. Намного легче понять особенно со структурами. Все видно сразу: что куда идет и что за чем следует! |
| Автор: freed0m 3.12.2004, 23:17 |
| Большое всем спасибо !!!!! Очень помогли |