03-树1 树的同构

#include <stdio.h>

#define MaxTree 10

typedef struct TreeNode{
	char element;
	int left;
	int right;
} BinTree;
BinTree BT1[MaxTree], BT2[MaxTree];

int BuildTree(BinTree T[]);
int Isomorphic(int root1, int root2);

int main(int argc, char const *argv[])
{
	int root1, root2;
	root1 = BuildTree(BT1);
	root2 = BuildTree(BT2);
	if(Isomorphic(root1, root2))
		printf("Yes\n");
	else
		printf("No\n");
	return 0;
}

int BuildTree(BinTree T[])
{
	int N;
	scanf("%d", &N);
	char cl, cr;
	int check[MaxTree] = {1};
	for (int i = 0; i < N; ++i){
		scanf("%c %c %c", &T[i].element, &cl, &cr);
		if(cl != '-'){
			T[i].left = cl - '0';
			check[T[i].left] = 0;
		}
		else
			T[i].left = -1;
		if(cr != '-'){
			T[i].right = cr - '0';
			check[T[i].right] = 0;
		}
		else
			T[i].right = -1;
	}
	for (int i = 0; i < N; ++i){
		if(check[i])
			return i;
	}
}

int Isomorphic(int root1, int root2)
{
	if(root1 == -1 && root2 == -1)
		return 1;
	if((root1 == -1 && root2 != -1) || (root1 != -1 && root2 == -1))
		return 0;
	else{
		if(T1[root1].element != T2[root2].element)
			return 0;
		if(T1[root1].left == -1 && T2[root2].left == -1)
			return Isomorphic(T1[root1].right, T2[root2].right);
		if(T1[root1].left != -1 && T2[root2].left != -1 && T1[T1[root1].left].element == T2[T2[root2].left].element)
			return ( Isomorphic(T1[root1].left, T2[root2].left) && Isomorphic(T1[root1].right, T2[root2].right) );
		if((T1[root1].left != -1 && T2[root2].left == -1) || (T1[root1].left == -1 && T2[root2].left != -1))
			return ( Isomorphic(T1[root1].left, T2[root2].right) && Isomorphic(T1[root1].right, T2[root2].left) );
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值