Программный модуль, реализующий операции

Рис.. Дерево выражений

Рис. 73. Дерево выражений

Различные алгоритмы обхода дерева выражений соответствуют различной структуре представления выражения в виде строки.

Нисходящему обходу соответствует префиксная форма представления, т. к. в ней знак операции предшествует операнду:

* + А 10. / B 5.2.

Восходящему обходу соответствует постфиксная форма представления, т. к. в ней знак операции находится после операндов:

A 10. + B 5.2 / *.

Смешанному обходу соответствует инфиксная форма представления, т. к. в ней знак операции находится между операндами:

А + 10. * В / 5.2.

Для того чтобы задать приоритеты операций, используется абсолютно скобочная форма, в которой каждое подвыражение заключается в круглые скобки:

((A + 10.) * (B / 5.2)).

На рис. 74 приведено дерево, смешанный обход которого позволяет получить бесскобочную инфиксную форму, эквивалентную дереву рис. 73, а скобочная инфиксная форма задает совсем другие приоритеты операций. Заметим, что подобная проблема не может возникнуть при использовании префиксной или постфиксной формы представления выражения.

(А + (10. * (В / 5.2)))

Какой алгоритм обхода необходимо использовать для того, чтобы подсчитать значение арифметического выражения, представленного в виде дерева?


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: