【问题标题】:Operator associativity in prefix expression前缀表达式中的运算符关联性
【发布时间】:2020-06-12 22:01:58
【问题描述】:

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

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

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

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

【问题讨论】:

  • 在这种情况下,两个前缀表达式产生相同的结果,但请尝试a-b*d-i。如果“在线转换器”做类似的事情,那么他们肯定会产生错误的结果。
  • @MattTimmermans 完全正确!那为什么会这样呢?我的代码和转换器here 显示相同的输出 -a-*bdi 会为您提供的中缀 exp 产生不正确的结果。你能解释一下为什么吗?因为这些转换应该始终正确且易于系统评估?

标签: algorithm data-structures postfix-mta prefix infix-notation


【解决方案1】:

您在此处指向的在线转换器将中缀转换为前缀的过程不正确: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

【讨论】:

  • 这澄清了我的困惑,不幸的是,谷歌搜索首页上显示的所有网站都遵循相同的错误程序,令人困惑和沮丧。谢谢。
猜你喜欢
  • 2019-11-06
  • 2017-01-13
  • 2021-05-30
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
  • 2019-03-15
  • 1970-01-01
相关资源
最近更新 更多