Преобразование из обратной польской записи в обычную. Как?

На входе - обратная польская запись формулы(в стеке). Нужно перевести ее в обычную.
Пример:
Получаем:  
2 3 + 6 2 / 5 2 * - +

Отдаем: 
2+3+6/2-5*2

P.S: Возможно вопрос покажется тупым, но я, увы, про эту запись впервые вчера услышал. Понять, простить, помочь.
  • Вопрос задан
  • 583 просмотра
Решения вопроса 1
longclaps
@longclaps
stack = "2 3 + 6 2 / 5 2 * - +".split()

def f():
    op = stack.pop()
    if op.isdigit():
        return float(op)
    else:
        y = f()
        x = f()
        if op == "+":
            return x + y
        if op == "-":
            return x - y
        if op == "*":
            return x * y
        if op == "/":
            return x / y

print(f())

Ах да, тебе же строка нужна:
stack = "2 3 + 6 2 / 5 2 * - +".split()
def g():
    op = stack.pop()
    if op.isdigit():
        return op
    else:
        y = g()
        x = g()
        return ''.join(("(", x, op, y, ")")) # *

print(g())

* Rsa97 указал на необходимость скобочек - некоторые из них избыточны, но лучше перебдеть, чем недобдеть.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
sgjurano
@sgjurano
Разработчик
https://learnc.info/adt/binary_tree_traversal.html

Это можно описать как обход бинарного дерева, в исходном виде: post-order (левое поддерево, правое поддерево, операция), в итоговом: in-order (левое поддерево, операция, правое поддерево).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы