前缀表达式中的运算符关联性

问题描述 投票:1回答:1

我正在处理中缀,前缀和后缀转换,我对以下表达式有疑问:

Infix:a+b*d-i 以下是我想到的转换。但是,下面的前缀表达式与在线转换工具不匹配前缀:-+a*bdi后缀:abd*+i-

[当我在一些在线转换器或什至在我编写的代码中放入上面的缀时,我得到:中缀:a+b*d-i前缀:+a-*bdi后缀:abd*+i-

因此,我的问题是,如果我们要评估上述前缀,那么我们将在进行加法运算之前先进行减法运算,这对我来说似乎是不正确的,因为应该首先评估每个运算符的关联度加法运算。这如何正确?

algorithm data-structures postfix-mta prefix infix-notation
1个回答
0
投票

您在此处指向的在线转换器使用不正确的过程将中缀转换为前缀:https://www.web4college.com/converters/infix-to-postfix-prefix.php

它说(这是错误的,所以没有人复制!!):

  1. 颠倒中缀字符串
  2. 转换为后缀
  3. 反转后缀字符串以获取前缀字符串

作者对此感到困惑,因为:

  • 表达式的后缀或前缀形式是表达式树的后置或前置遍历;和
  • 可以通过反转已反转树的后序遍历来获得树的预序遍历...

但是,由于左或右关联性,反转中缀表达式不会反转其表达式树。因此,给定的过程会产生错误的答案。

a-b-c TREE      REVERSED TREE       c-b-a TREE

    -                 -                 -
   / \               / \               / \
  -   c             c   -             -   a
 / \                   / \           / \
a   b                 b   a         c   b
© www.soinside.com 2019 - 2024. All rights reserved.