Algorithm 使用树结构,检查两个给定表达式是否相等 问题

Algorithm 使用树结构,检查两个给定表达式是否相等 问题,algorithm,data-structures,tree,expression-trees,Algorithm,Data Structures,Tree,Expression Trees,我有两种表达方式 仅使用两个运算符:+和*。(例如:(a+b)、(a*b)是有效的表达式) 我应该写一个程序来确定这两个表达式是否相等 例如: 表达式1:(a+b)c=ac+b*c 表达式2:c*(a+b)=ca+cb=ac+bc 结论:表达1和表达2是相同的 注: 我有以下迹象: 以“乘积和”的形式列出这两个表达式,对和的项进行排序,然后检查表达式是否相等。 我应该使用树形结构来完成此任务: 为两个表达式中的每一个创建 对于两个结果中的每一个树(从点1开始),创建另一个树,该树将表示相应表达

我有两种表达方式

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

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

例如:

  • 表达式1:(a+b)c=ac+b*c
  • 表达式2:c*(a+b)=ca+cb=ac+bc 结论:表达1和表达2是相同的


    注: 我有以下迹象:

    以“乘积和”的形式列出这两个表达式,对和的项进行排序,然后检查表达式是否相等。 我应该使用树形结构来完成此任务:

  • 为两个表达式中的每一个创建
  • 对于两个结果中的每一个树(从点1开始),创建另一个树,该树将表示相应表达式的“乘积之和”形式

  • 我已经知道的 我已经编写了一些程序来创建。 我有处理树木的经验


    问题: 你能给我建议一个解决这个问题的算法吗?
    提前谢谢。

    首先需要搜索加法节点上方有乘法节点的情况。当您找到时,请替换那里的结构,使添加项位于顶部。这样做,直到你再也找不到这样的案例

    现在,您的树应该看起来像一个产品的总和。拿着每个产品,左右翻转子项,以便对它们进行排序。确切的标准并不重要,但对于abc这样的产品术语,您应该始终获得相同的结构(请注意,还应该将术语与节点进行比较,并可能旋转术语,以便将(ab)c和(bc)固定到相同的结构)。完成后,对上面的加法执行相同的操作

    对两个表达式树都执行此操作,完成后只需比较是否得到完全相同的树