判断二叉树是否相似

#include<stdio.h>/*2009.10.25晚写于白鹿原*/
#include <malloc.h>/*判断二叉树是否相似*/
#include <conio.h>
typedef int DataType;
typedef struct Node
{
DataType data;
struct Node *LChild;
struct Node *RChild;
}BitNode,*BitTree;
void CreatBiTree(BitTree *bt)//用扩展先序遍历序列创建二叉树,如果是.当前树根置为空,否则申请一个新节点//
{
char ch;
ch=getchar();
if(ch=='.')*bt=NULL;
else
{
*bt=(BitTree)malloc(sizeof(BitNode));
(*bt)->data=ch;
CreatBiTree(&((*bt)->LChild));
CreatBiTree(&((*bt)->RChild));
}
}

int like(BitTree b1,BitTree b2)/*判断两个树是否相似*/
{
int like1,like2;
if(b1==NULL&&b2==NULL)
return 1; /*两个为空子树、相似*/
else if(b1==NULL||b2==NULL)
return 0; /*两个中某一个为空子树、不相似*/
else
{
like1=like(b1->LChild,b2->LChild);
like2=like(b1->RChild,b2->RChild);
return(like1&&like2);
}

}

void PrintTree(BitTree Boot,int nLayer) //按竖向树状打印的二叉树 //
{
int i;
if(Boot==NULL) return;
PrintTree(Boot->RChild,nLayer+1);
for(i=0;i<nLayer;i++)
printf(" ");
printf("%c/n",Boot->data);
PrintTree(Boot->LChild,nLayer+1);
}
void main()
{
BitTree T1,T2;
int h;
int layer;
int treeleaf;
layer=0;
printf("请输入二叉树T1中的元素(以扩展先序遍历序列输入,其中.代表空子树):/n");
CreatBiTree(&T1);
getchar();
printf("请输入二叉树T2中的元素(以扩展先序遍历序列输入,其中.代表空子树):/n");
CreatBiTree(&T2);
treeleaf=like(T1,T2);
if(treeleaf)
printf("T1和T2相似!");
else
printf("T1和T2不相似!");
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值