Java 作为二叉树的表达式树
我有一个简单的问题 为什么所有表达式树都建模为“二叉树”而不是“N元树”Java 作为二叉树的表达式树,java,expression,expression-trees,Java,Expression,Expression Trees,我有一个简单的问题 为什么所有表达式树都建模为“二叉树”而不是“N元树” 表达式不能使用N元树建模有什么原因吗?表达式树通常是二进制的原因有很多: 最常见的表达式树表示算术运算(+,-,*,/)或逻辑谓词(和,或,非,异或)。有所有的二元(和一元)操作,所以二元树是最有意义的。例如,您可以使用n元+,但这只会使事情变得复杂,没有充分的理由 从更理论的角度来看,如果你有一个n元树,你可以用一个等价的二叉树来表示它,而不会丢失任何东西。使用n元+示例,可以认为以下树(一个n元树和一个二进制树)是相同
表达式不能使用N元树建模有什么原因吗?表达式树通常是二进制的原因有很多:
+
,-
,*
,/
)或逻辑谓词(和
,或
,非
,异或
)。有所有的二元(和一元)操作,所以二元树是最有意义的。例如,您可以使用n元+
,但这只会使事情变得复杂,没有充分的理由+
示例,可以认为以下树(一个n元树和一个二进制树)是相同的:
+ +
/|\ / \
a b c + c
/ \
a b
System.Linq.Expressions
命名空间)使用n元树作为调用表达式。因此,表达式f(a,b,c)
将表示为InvocationExpression
,如下所示:
f
/|\
a b c
为什么所有表达式树都建模为“二叉树”而不是“N元树”
他们不是。表达式树内部节点是操作符,操作符可以是一元、二元或三元,至少可以是更多
有什么原因不能使用N元树对表达式建模吗
是的。他们肯定能。。。但所有n元树都可以建模为二叉树,那个么为什么还要为额外的复杂性而烦恼呢?那个么这是否意味着表达式树也可以使用n元树呢?因为无论我在哪里读到表达式树,我都只看到二叉树的例子。它们可能是,但在大多数情况下并不必要,这取决于你处理的表达式树的类型。如果你不必使用n元树,那为什么要麻烦呢?@LouisWasserman,很抱歉我没有完全理解。我们谈论的是什么类型的表达式,为什么你需要n元树的全部通用性?你能说说你谈论的原因吗?