Показать сообщение отдельно
Старый 23.10.2005, 18:00     # 3
Trotil
Advanced Member
 
Аватар для Trotil
 
Регистрация: 21.04.2005
Адрес: град Москва
Сообщения: 431

Trotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собойTrotil Имеются все основания чтобы гордиться собой
Решил подкрепить свою идею надлядным примером работы алгоритма.
Возьмем, например, такое выражение: "CD*E+AB+*FG*-#" (решетка - символ-указатель на просматриваемый элемент)

1) Вход в функцию: рисуем "-" и ветви:
Код:
                            -
                           / \
                          /   \
                         /     \
                        /       \
2) Сдвигаем указатель "#" и обнаруживаем на месте первого аргумента "знак операции" "*". Запускаем ту же функцию, но уже строкой: "CD*E+AB+*FG*#-".
3) Отрисовываем "*" и ветви:
Код:
                            -
                           / \
                          /   \
                         /     \
                        /       \
                                 *      
                                 / \
                                /   \
Отрисовываем аргументы F,G. Знаков операции не обнаружено, поэтому новая функция не запускается, данная функция завершает работу и передается управление самой первой функции. Дерево имеет вид:
Код:
                            -
                           / \
                          /   \
                         /     \
                        /       \
                                 *      
                                 / \
                                /   \
                               F     G
В первой функции начинает выполняться инструкция 4: но на месте аргумента стоит знак операции "умножение".
Опять вызывается функция tree со строкой "CD*E+AB+*#FG*-" (при каждой отрисовке символа решетка сдвигается на один символ влево)

И так далее. В конце получаем дерево след. вида:
Код:
                            -
                           / \
                          /   \
                         /     \
                        /       \
                        *        *      
                       / \      / \
                      /   \    /   \
                     /     \   F    G 
                    /       \
                   +         +
                  / \       / \
                 /   \     /   \
                A     B   *     E
                         / \
                        /   \
                       С     D

Последний раз редактировалось Trotil; 23.10.2005 в 18:02.
Trotil вне форума