树Tree1 和树Tree2要对齐(匹配)。
对齐主要是指结构对齐,对齐是根据结点的内容来判断,如结点内容一样,"aaa"=="aaa"。
两树之间的对齐是在树的同一层进行对齐,不跨树的层次对齐。假设TA={Ra,A1,A2,...,Am},TB={Rb,B1,B2,...,Bn};
Ra和Rb分别是树TA和TB的根结点,Ai(1<=i<=m) 和Bj(1<=j<=n)分别是树TA和树TB的第一层的结点。
如果Ra==Rb则找出Ai与Bj中结点内容一样的结点对,把结点内容一样的称为匹配。
匹配关系只能是一对一的,不能一对多、多对一或多对多。
再根据找到的匹配对,来对齐这个匹配对的两个结点的下一层对齐情况。
希望是:
1、一个能实现树对齐的算法(推荐递归),提供思路也行,最好给出算法时间和空间复杂度。
2、如何表示两棵树的对齐(如果是对齐了,如何表示),如何存储。

解决方案 »

  1.   

    如下,冒號後面是隱藏資訊,自己的ID。括號後面就是三個值。
    如果兩棵樹的ID不會一致,則第二個值改成父節點資訊。T1
    A:0 (0,-1,A)
     A-a:1 (1,0,A)
      A-a-1:4 (2,1,A-a-1)
      A-a-2:5 (2,1,A-a-2)
      A-a-3:6 (2,1,A-a-3)
     A-b:2 (1,0,A-b)
      A-b-1:8 (2,2,A-b-1)
      A-b-2:9 (2,2,A-b-2)T2
    A:0 (0,-1,A)
     A-a:1 (1,0,A-a)
      A-a-1:4 (2,1,A-a-1)
      A-a-2:5 (2,1,A-a-2)
      A-a-3:6 (2,1,A-a-3)
      A-a-4:7 (2,1,A-a-4)
     A-c:3 (1,0,A-c)
      A-c-1:10 (2,3,A-c-1)
      A-c-2:11 (2,3,A-c-2)