//03-树1 树的同构
import java.util.Scanner;
class node{
String zimu;
int left;
int right;
}
public class Main {
final static int Max_Size = 10;
static node[] Read(Scanner s) {
node[] T = new node[Max_Size + 1];
int n = 0;
n = s.nextInt();
String x, y;
for(int i = 0; i < n; i ++) {
T[i] = new node();
T[i].zimu = s.next();
x = s.next();
y = s.next();
if(!x.equals("-")) {
T[i].left = Integer.parseInt(x);
}
else {
T[i].left = -1;
}
if(!y.equals("-")) {
T[i].right = Integer.parseInt(y);
}
else {
T[i].right = -1;
}
}
return T;
}
static int check(node[] T, int n) {
int[] a = new int[n];
int p = -1;
for(int i = 0; i < n; i ++) {
if(T[i].left != -1) {
a[T[i].left] = 1;
}
if(T[i].right != -1) {
a[T[i].right] = 1;
}
}
for(int i = 0; i < n; i ++) {
if(a[i] == 0) {
p = i;
break;
}
}
return p;
}
static boolean isomorphism(node[] T1, int R1, node[] T2, int R2) {
if (R1 == -1 && R2 == -1)
return true;
//一个空,一个不空
if (R1 == -1 && R2 != -1 || R1 != -1 && R2 == -1)
return false;
//根节点不相等
if (!(T1[R1].zimu.equals(T2[R2].zimu))) {
return false;
}
//如果树1.左和树2.左都空,只要比较树1.右和树2.右
if ((T1[R1].left == -1) && (T2[R2].left == -1))
return isomorphism(T1, T1[R1].right, T2, T2[R2].right);
//如果树1.左和树2.左都不空,并且值相等,那么比较树1.左和树2.左 && 树1.右和树2.右
if (((T1[R1].left != -1) && (T2[R2].left != -1))
&& (T1[T1[R1].left].zimu.equals(T2[T2[R2].left].zimu))) {
return isomorphism(T1, T1[R1].left, T2, T2[R2].left)
&& isomorphism(T1, T1[R1].right, T2, T2[R2].right);
} else {
//否则比较 树1.左和树2.右 && 树1.右和树2.左
return isomorphism(T1, T1[R1].left, T2, T2[R2].right)
&& isomorphism(T1, T1[R1].right, T2, T2[R2].left);
}
}
static String getType(Object test) {
return test.getClass().getName().toString();
}
public static void main(String args[]){
Scanner s = new Scanner(System.in);
node[] T1 = new node[Max_Size + 1];
node[] T2 = new node[Max_Size + 1];
int R1, R2;
T1 = Read(s);
T2 = Read(s);
s.close();
int n1 = 0;
while(T1[n1] != null) {
n1 ++;
}
R1 = check(T1, n1);
int n2 = 0;
while(T2[n2] != null) {
n2 ++;
}
R2 = check(T2, n2);
//System.out.println(R1);
//System.out.println(R2);
if(isomorphism(T1, R1, T2, R2)) {
System.out.print("Yes");
}
else {
System.out.print("No");
}
}
}
03-树1 树的同构
最新推荐文章于 2024-08-08 14:30:51 发布