使用Tree结构,检查两个给定的表达式是否相等

时间:2015-11-26 15:54:06

标签: algorithm data-structures tree expression-trees

问题

我有两个表达方式。

仅使用两个运算符:+和*。 (例如:(a + b),(a * b)是有效的表达式)。

我应该编写一个程序来确定这两个表达式是否相等。

示例:

  1. 表达式1:(a + b) c = a c + b * c;
  2. 表达式2:c *(a + b)= c a + c b = a c + b c;
  3. 结论:表达式1和2相等。

    注意:

    我有以下迹象:

    将这两个表达式放在“产品总和”表单中,对总和的术语进行排序,然后检查表达式是否相等。 我应该使用树结构来完成这个任务:

    1. 为两个表达式中的每一个创建Expression Tree
    2. 对于两个树中的每一棵树(从第1点开始)创建另一棵树,它代表相应表达式的“产品总和”形式。
    3. 我已经知道的

      我已经编写了创建Expression Trees的程序。 我有使用树木的经验。

      问题

      请你,建议我一个可以解决这个问题的算法吗? 提前谢谢。

1 个答案:

答案 0 :(得分:1)

首先需要搜索在添加节点上方有乘法节点的情况。当你发现更换那里的结构,以便添加在顶部。这样做直到你再也找不到任何此类案件为止。

现在,您的树应该看起来像产品的总和。取出每个产品并翻转左右儿童,以便对其进行分类。准确的标准并不重要,但是你应该总是得到像abc这样的产品术语的相同结构(注意,还应该将术语与节点进行比较,并且可以旋转术语,这样可以修复(ab)c和a(bc) )到相同的结构)。完成后,请执行上述添加操作。

对于两个表达式树执行此操作,当您完成后只需比较完全相同的树。