树的同构
描述:
给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是“同构”的。例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A、B、G的左右孩子互换后,就得到另外一棵树。而图2就不是同构的。
题解:
int Isomorphism(Root R1, Root R2){
if(R1 == Null && R2 == Null)//都为null
return 1;
if((R1 == Null && R2 != Null) || (R1 !=Null && R2 == Null))//一个为null一个不为null
return 0;
if(T1[R1].Data != T2[R2].Data)//都不为null但值不相等
return 0;
if(T1[R1].Left == Null && T2[R2].Left == Null){
return Isomorphism(T1[R1].Right, T2[R2].Right);
}
if(T1[R1].Left !=Null && T2[R2].Left !=Null && T1[T1[R1].Left].Data == T2[T2[R2].Left].Data)
return Isomorphism(T1[R1].Left, T2[R2].Left) && Isomorphism(T1[R1].Right, T2[R2].Right);
else
return Isomorphism(T1[R1].Left, T2[R2].Right) && Isomorphism(T1[R1].Right, T2[R2].Left);
}