{数据结构}判断二叉树相似

 /***********************************************************************

算法描述:若已知两棵二叉树B1和B2皆为空,或者皆不空且B1的左,右子树和B2的
左,右子树分别相似,则称二叉树B1和B2相似.试编写算法,判别给定的两棵二叉树
是否相似 .(习题6.36) 
*************************************************************************/
int  compare(bitree B1, bitree B2)
{
  if(!B1 && !B2)
     return  1;
  else
  if(B1 && B2 && compare(B1->lch, B2->lch) && compare(B1->rch, B2->rch))
     return  1;
  else 
     return  0;  
}
/*********************************************************
算法总结:
1.首先要明确的是相似是结构相似,而不是结点的数据域相似,故不能通过遍历来比较数据
域来确定是否相似.
2.而关于结构上的相似一开始是无法立即判断出来的.还是要通过遍历,但是遍历注重的就
不是数据域方面.而是各个结点的压栈顺序以及结点个数方面.所以if里面有4个条件共同
支撑.
i)B1 && B2说明首先要B1,B2同时存在,否则肯定是不会相似的(结点个数都不相同了)
 
ii)compare(B1->lch, B2->lch) && compare(B1->rch, B2->rch)是2个递归.也就是通过
递归进行遍历.遍历是一个结点一个结点向下走的,所以如果遍历时的"过程"都是一样的,
那么结构肯定是一样的了.
由于一切递归都可以用非递归来实现,这道题也可以.只不过非递归要模拟递归函数的栈
的工作机制.代码量多些.在这里使用递归十分清晰明白,可读性也比较好.
如果有时间把非递归的算法写写:) 
**************************************************************/
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值