⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 same.c

📁 &laquo 问题描述: 有时需要测试2 个数据结构的同构性
💻 C
字号:
#include <stdio.h>
#include <malloc.h>
typedef struct node *btlink;
struct node{
	struct node *left;
	struct node *right;
};
void main()
{
	int same(btlink tree1,btlink tree2);
	int k,n,m,a[3];
	btlink tree1,tree2;
	freopen("input.txt","r",stdin);
	freopen("output.txt","w",stdout);
	scanf("%d",&n);k=n;
	tree1=(struct node *)malloc(sizeof(*tree1)*(n+1));
while(n--)
{
	scanf("%d%d%d",&a[0],&a[1],&a[2]);
	if(a[1]!=0)
		tree1[a[0]].left=&tree1[a[1]];
	else tree1[a[0]].left=NULL;
	if(a[2]!=0)
		tree1[a[0]].right=&tree1[a[2]];
	else tree1[a[0]].right=NULL;
}
scanf("%d",&m);
if(m!=k)
{printf("No");return;}
else 
{   tree2=(struct node *)malloc(sizeof(*tree2)*(m+1)); 
    while(m--)
{
	scanf("%d%d%d",&a[0],&a[1],&a[2]);
	if(a[1]!=0)
		tree2[a[0]].left=&tree2[a[1]];
	else tree2[a[0]].left=NULL;
	if(a[2]!=0)
		tree2[a[0]].right=&tree2[a[2]];
	else tree2[a[0]].right=NULL;
}
}
if(same(&tree1[1],&tree2[1])==1)
    printf("Yes");
else printf("No");
}
int same(btlink tree1,btlink tree2)
{
	if(tree1->left!=NULL&&tree1->right!=NULL)
	{if(tree2->left!=NULL&&tree2->right!=NULL) 
	   if(same(tree1->left,tree2->left)&&same(tree1->right,tree2->right))
	       return 1;
	   else return 0;
	 else return 0;}
	else if(tree1->left!=NULL&&tree1->right==NULL)
	{if(tree2->left!=NULL&&tree2->right==NULL)
			if(same(tree1->left,tree2->left))
				return 1;
			else return 0;
	 else return 0;}
	else if(tree1->left==NULL&&tree1->right!=NULL)
	{if(tree2->left==NULL&&tree2->right!=NULL)
			if(same(tree1->right,tree2->right))
				return 1;
			else return 0;
	 else return 0;}
    else
	{if(tree2->left==NULL&&tree2->right==NULL)
			return 1;
	 else return 0;}
     
}	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -