前缀表达式中的运算符结合性
Operator associativity in prefix expression
我正在检查中缀、前缀和后缀转换,我对以下表达式有疑问:
中缀:a+b*d-i
下面的转换是我想到的。但是,下面的前缀表达式与在线转换工具不匹配
前缀:-+a*bdi
后缀:abd*+i-
当我将上述中缀放入某些在线转换器甚至我编写的代码中时,我得到:
中缀:a+b*d-i
前缀:+a-*bdi
后缀:abd*+i-
所以,我的问题是,如果我们要评估上面的前缀,那么我们将在加法之前进行减法,这对我来说似乎不正确,因为应该首先评估运算符关联性加法。这怎么正确?
您在此处指向的在线转换器将中缀转换为前缀的过程不正确:https://www.web4college.com/converters/infix-to-postfix-prefix.php
它说(这是错误的,所以没有人复制它!):
- 反转中缀字符串
- 转换为后缀
- 反转后缀字符串得到前缀字符串
本文作者很困惑,因为:
- 表达式的后缀或前缀形式是表达式树的后序或前序遍历;和
- 你可以通过反转反向树的后序遍历来获得树的前序遍历...
但是由于左结合性或右结合性,反转中缀表达式不会反转其表达式树。因此,给定的过程会产生错误的答案。
a-b-c TREE REVERSED TREE c-b-a TREE
- - -
/ \ / \ / \
- c c - - a
/ \ / \ / \
a b b a c b
我正在检查中缀、前缀和后缀转换,我对以下表达式有疑问:
中缀:a+b*d-i
下面的转换是我想到的。但是,下面的前缀表达式与在线转换工具不匹配
前缀:-+a*bdi
后缀:abd*+i-
当我将上述中缀放入某些在线转换器甚至我编写的代码中时,我得到:
中缀:a+b*d-i
前缀:+a-*bdi
后缀:abd*+i-
所以,我的问题是,如果我们要评估上面的前缀,那么我们将在加法之前进行减法,这对我来说似乎不正确,因为应该首先评估运算符关联性加法。这怎么正确?
您在此处指向的在线转换器将中缀转换为前缀的过程不正确:https://www.web4college.com/converters/infix-to-postfix-prefix.php
它说(这是错误的,所以没有人复制它!):
- 反转中缀字符串
- 转换为后缀
- 反转后缀字符串得到前缀字符串
本文作者很困惑,因为:
- 表达式的后缀或前缀形式是表达式树的后序或前序遍历;和
- 你可以通过反转反向树的后序遍历来获得树的前序遍历...
但是由于左结合性或右结合性,反转中缀表达式不会反转其表达式树。因此,给定的过程会产生错误的答案。
a-b-c TREE REVERSED TREE c-b-a TREE
- - -
/ \ / \ / \
- c c - - a
/ \ / \ / \
a b b a c b