03-树1 树的同构 (25 分)

这道题不难,画图就出来了

#include<cstdio>
#define null -1
const int maxn=15;
typedef int Tree;
typedef char ElementType;
struct TNode{
	Tree left, right;
	ElementType data;
	int flag;
}T1[maxn], T2[maxn];
int check[maxn];
Tree BuildTree( struct TNode T[]){
	Tree R=-1, cl, cr;
	int n;
	scanf("%d\n", &n);
	for(int i=0; i<n; i++)check[i]=0;
	for(int i=0; i<n; i++){
		scanf("%c %c %c\n", &T[i].data, &cl, &cr);
		if(cl!='-'){
			T[i].left=cl - '0';
			check[T[i].left]=1;
		}else{
			T[i].left=null;
		}
		if(cr!='-'){
			T[i].right= cr-'0';
			check[T[i].right]=1;
		}else{
			T[i].right=null;
		}
	}
	for(int i=0; i<n; i++)
		if(check[i]==0){
			R=i;
			break;	
		}
	return R;
}
int Isomorphic(Tree R1, Tree R2){
	if(R1==null && R2==null)return 1;
	if((R1==null && R2!=null) || (R2==null && R1!=null))return 0;
	if(T1[R1].data!=T2[R2].data)return 0;
	if(T1[R1].left==null && T2[R2].left==null)
		return Isomorphic(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(Isomorphic(T1[R1].left, T2[R2].left)&&Isomorphic(T1[R1].right, T2[R2].right));
	}else{
		return(Isomorphic(T1[R1].right, T2[R2].left)&&Isomorphic(T1[R1].left, T2[R2].right));
	}
}
int main(){
	Tree R1, R2;
	R1=BuildTree(T1);
	R2=BuildTree(T2);
	if(Isomorphic(R1, R2)){
		printf("Yes");
	}else{
		printf("No");
	}	
	return 0;
}

【测试点】

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值