表达树作为二叉树

时间:2013-08-15 18:45:35

标签: java expression expression-trees

我有一个简单的问题。

为什么所有表达式树都被建模为“二叉树”而不是“N树”?

是否有任何理由不能使用N-ary树建模表达式?

2 个答案:

答案 0 :(得分:2)

表达树通常是二元的,有一些很好的理由:

  1. 最常见的表达式树表示算术运算(+-*/)或逻辑谓词(AND,{{1} },ORNOT)。存在所有二进制(和一元)操作,因此二叉树最有意义。你可以拥有例如n-ary XOR,但这只是没有充分理由使事情变得复杂。
  2. 从更理论的角度来看,如果你有一个n-ary树,你可以使用等效的二叉树来表示它而不会丢失任何东西。使用n-ary +示例,以下树(一个n元和一个二元)可以被认为是相同的:

    +
  3. 另一方面,有些库使用n-ary表达树,它们是有意义的。例如,C#表达式树(来自 + + /|\ / \ a b c + c / \ a b 名称空间)使用n-ary树作为调用表达式。因此,表达式System.Linq.Expressions将表示为f(a, b, c),如下所示:

    InvocationExpression

答案 1 :(得分:0)

  

为什么所有表达式树都被建模为“二叉树”而不是“N树”?

他们不是。表达式树的内部节点是运算符,运算符至少可以是一元的,二元的或三元的,也许更多。

  

是否有任何理由不能使用N-ary树建模表达式?

他们是。