前缀符号转换成树通常是这样完成的:
但是,我需要支持具有两个以上操作数的所谓可链接操作。如果该操作是可拆分的,即
(+ a b c) = (+(+ a b) c)
没有问题。
+
/ \
+ c
/ \
a b
但是,如果运算符不可拆分,则此方法不起作用。一个例子是成对不同的运算符。
(distinct a b c) != (distinct (distinct a b) c)
左边表示a != b、a != c 和b != c,而右边只表示a != b 和b != c。尝试构建 n 叉树可能会导致无法很好地遍历树:
distinct
/ | \
a b c
是否有人对此类问题有经验并且对如何解决该问题有想法?