以下是同一树的三个等价表示(系统发育)。我试图找出一种算法来检查两个树表示是否相等。 如果节点之间的父子关系相似,则树被定义为等效。
(Whale,(Seal,((Mouse,Rat),((((Carp,Loach),Frog),Chicken),Human))),Cow);
(Whale,(Seal,((Rat,Mouse),(Human,((Frog,(Loach,Carp)),Chicken)))),Cow);
((Seal,((Rat,Mouse),(Human,((Frog,(Loach,Carp)),Chicken)))), Cow, Whale);
有人可以推荐一种方法吗?
答案 0 :(得分:8)
一种方法是按字典顺序(或任何严格的弱顺序)对孩子进行比较。
答案 1 :(得分:0)
您可以将每个边写两次 - 一次为(a,b),一次为(b,a),两棵树都可以。例如,为(Mouse,Rat)生成两个字符串:“Mouse:Rat”和“Rat:Mouse”然后写下所有这些字符串,按字典顺序对它们进行排序并比较两个列表。如果它们相同则树木相似。这与Andrew Tomazos的解决方案不同,因为它会说树与其自身相似,从底部到顶部,即它支持边缘反转。
答案 2 :(得分:0)
检查两棵树的顺序和后序遍历。如果它们相同则那两棵树是相同的