Преобразование терренарных и логических операторов из инфикса в постфикс
Как я могу преобразовать эти два примера из инфикса в постфикс?
Example 1:
max = (a > b) ? a : b
Example 2:
(a != 0) ? ((b != 0) ? True : False) : False
Для обоих выражений я подумал, что мне просто нужно снять скобки. Однако, когда я пытаюсь преобразовать обратно из постфикса в инфикс, выражение недопустимо. Я знаю, как делать простые операции:
Infix: (((a + b) * (c + d) + a) * c - 6) * b
Postfix: a b + c d + * a + c * 6 - b *
... но я не уверен, как конвертировать max и логические выражения.
1 ответ
Вместо того, чтобы думать о "+", "-" и "*" как о операциях, отличных от логических операторов или функций max / min, я думаю, что вы могли бы лучше понять проблему, просто сказав: "Все это операторы с 2 операндами - т.е. они являются бинарными операторами."
Затем проблема состоит в том, чтобы настроить дерево выражений таким образом, чтобы корнем был оператор ('+', '-', 'max' или любой другой), а дочерние элементы были операндами. Создание инфикса или постфикса - это просто вопрос того, как вы пересекаете дерево выражений.