表达式树问题

时间:2015-04-28 18:14:38

标签: binary-tree expression-trees prefix postfix-notation infix-notation

我正在手工绘制表达树,我一直遇到一个我不明白的问题。

我对表达式树的理解,可能是错误的,你选择一个根,制作树,然后如果你遍历树预订,有序或后序,那就是相应的 - 修复你会得到的表达。

所以,如果我有......

缀: A + B + C - D

前缀表达式如下所示:-++ABCD

,后缀表达式如下:AB+C+D-

我的树看起来像这样......

                       +
                     /   \
                   +       -
                 /   \   /   \
                A     B C     D

现在,我假设您选择了最明显的根,并相应地生成树,因此我选择了中间的+运算符。当我按顺序遍历树时,它会生成正确的表达式。 但是,当我按预订遍历时,答案是:++AB-CD这是不正确的。后缀也不正确,在后续遍历树时答案为AB+CD-+

我犯了什么错误?

这是我选择的根吗? 我从根和他们后来的孩子创造孩子的方法? 或者是否使用中缀表达式树不能始终找到后缀和前缀表达式?

1 个答案:

答案 0 :(得分:1)

您无法选择根。

如果您认为您的运算符为left-associative(通常用于算术表达式),则A + B + C - D等同于((A + B) + C) - D。这表明根是-,正确的树是:

      -
     / \
    +   D
   / \
  +   C
 / \
A   B

遍历此树将为您提供正确的前缀和后缀表达式。

现在,整数加法是关联的,因此((A + B) + C) - D会给你与(A + B) + (C - D)相同的结果,但它不是同一个表达式。这可能让你很困惑。