2016-10-28 11 views
1

У меня возникла проблема с созданием выражения String при задании дерева выражений. Если мое выражение дерево выглядит следующим образом (в консоли вывода):Создание выражения String при заданном дереве выражений

(*(+(5)(-(2)(3)))(6)) 

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

(2 - 3 + 5) * 6 

Должен ли я работать с реальным выражением дерева или ориентации строковое дерева выражений (как показано выше, как: (* (+ (5) (- (2) (3))) (6))).

ответ

0

Вы должны использовать префикс для алгоритма преобразования инфикс.

Это потому, что ваша строка дерева выражений находится в префиксной форме и вы хотите ее в форме инфикса.

Вы можете удалить все фигурные скобки в строке ввода. Так будет легче.

+0

спасибо, это имеет смысл. Я проголосовал за вас, но он не появляется, потому что у меня низкая репутация. Как вы думаете, использование стека для этого было бы лучшим способом сделать это? –

+0

Я решил вашу проблему .. этого достаточно для меня. И да, стек - лучший способ решить такие проблемы из-за его свойства LIFO. –

0

О том, что я советую вам прочитать эти документы.

маневровый-ярд алгоритм: https://en.wikipedia.org/wiki/Shunting-yard_algorithm

Этот алгоритм касается «маркеров» штабелирования в соответствии с их «старшинства власти», на примере, функция между скобкой приходит первым. Что же касается, что прочитать эти:

https://en.wikipedia.org/wiki/Order_of_operations

http://introcs.cs.princeton.edu/java/11precedence/ (Это один специфичен для программирования)

Я надеюсь, что я помог.

Имейте славный день. :)