判断二叉树是否同构3.13

#include<stdio.h>  
#include<stdbool.h>  
#include<stdlib.h>  
/***/  
typedef char Ele;  
typedef struct Node{  
Ele e;  
struct Node *left;  
struct Node *right;  
}*Tree,*Tnode;  
  
Tree createTree(){  
char tmp;  
Tree t;  
scanf("%c",&tmp);  
if(tmp=='#'){  
    t=NULL;  
}else{  
t=(Tree)malloc(sizeof(struct Node));  
t->e=tmp;  
t->left=createTree();  
t->right=createTree();  
}  
return t;  
}  
  
/*判断树是否同构by phoneix 1903935168*/  
bool isyes(Tree ta,Tree tb){  
if(ta==NULL&&tb==NULL)  
    return 1;  
if(ta==NULL&&tb!=NULL||ta!=NULL&&tb==NULL)  
return 0;  
if(ta->e!=tb->e)  
return 0;  
if(ta->left==NULL&&tb->left==NULL)//如果执行到这里已经说明ta->e==t->b了,左子树此时同构只需要判断右子树是否同构  
    return isyes(ta->right,tb->right);  
if(ta->left!=NULL&&tb->left!=NULL&&ta->left->e==tb->left->e)  
return isyes(ta->left,tb->left)&&isyes(ta->right,tb->right);  
//if(ta->left!=NULL&&tb->left!=NULL&&ta->left->e!=tb->left->e) 少了种情况 
else
return isyes(ta->left,tb->right)&&isyes(ta->right,tb->left);  
} 
void print(Tree t){
if(t){

printf("%c",t->e );
print(t->left);
print(t->right);


}


}



int main(){
Tree t=createTree();
printf("第一颗树输入完毕\n");//abc##e##d##
getchar();//读取第一次输入缓存里的回车,抛弃之
Tree t1=createTree();

printf("第二颗树输入完毕\n");//ad##bc##e##
if(isyes(t,t1))
printf("同构" );
else
printf("不同构" );

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值