import java.util.*;
class treenode{
public char val;
int left;
int right;
}
public class Main {
public static int root = -1; //全局变量
public static treenode[] buildtree(Scanner in){
treenode[] T = new treenode[10];
int N = in.nextInt();
if(N == 0) return null;//空树判断
int[] check = new int[N];
for(int i=0;i<N;i++) {
T[i] = new treenode();//新建结点
T[i].val = in.next().charAt(0);
char cl = in.next().charAt(0);//left
if(cl!='-') {
T[i].left = cl-'0';
check[T[i].left]=1;
}
else T[i].left = -1;
char cr = in.next().charAt(0);//right
if(cr!='-') {
T[i].right = cr-'0';
check[T[i].right]=1;
}
else T[i].right = -1;
}
int j;
for(j=0;j<N;j++) {
if(check[j] == 0) break;
}
root = j;
return T;
}
static boolean istg(int r1,int r2,treenode[] T1,treenode[] T2 ) {
if(r1 == -1 && r2 == -1) return true;
if((r1 == -1 && r2 != -1)||(r2 == -1 && r1 != -1)) return false;
if(T1[r1].val != T2[r2].val) return false;
if(T1[r1].left == -1 && T2[r2].left == -1)
return istg(T1[r1].right,T2[r2].right,T1,T2);
if(T1[r1].left != -1 && T2[r2].left != -1 && T1[T1[r1].left].val == T2[T2[r2].left].val)
return (istg(T1[r1].left,T2[r2].left,T1,T2) && istg(T1[r1].right,T2[r2].right,T1,T2));
else return (istg(T1[r1].left,T2[r2].right,T1,T2) && istg(T1[r1].right,T2[r2].left,T1,T2));
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
treenode[] T1 = buildtree(in);
int r1 = root;
treenode[] T2 = buildtree(in);
int r2 = root;
if(istg(r1,r2,T1,T2))
System.out.println("Yes");
else System.out.println("No");
}
}
注意:
只能在main函数里定义scanner in,再传给其他函数,否则会出现读数据出错。