判断二叉树是否同构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("不同构" );

}

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_26046771/article/details/68945852
个人分类: 数据结构
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭