二叉树--判断一颗二叉树是是否是另一颗树的子树。比如tree2是tree1的子树。

这里写图片描述

思路:先判断根,根相同再判断左右子树如果所有的都相同,则此树是另一个树的子树。
如果只有根相同,则向下继续找和跟相同的结点。再进行如上相同的操作。

bool HasSubTree(BinaryTreeNode* pRoot1,BinaryTreeNode* pRoot2)
{
     bool ret = false;
     if(pRoot1 != NULL && pRoot2 != NULL)
     {
          if(pRoot1 -> value == pRoot2 -> value)
               ret = DoTree1haveTree2(pRoot1,pRoot2);
          if(!ret)
               ret = HasSubTree(pRoot1 -> left,pRoot2);
          if(!ret)
               ret = HasSubTree(pRoot1 -> right,pRoot2);
     }
          return ret;
}

bool DoTree1haveTree2(pRoot1,pRoot2)
{
     if(pRoot1 == NULL)
          return false;
     if(pRoot2 == NULL)
          return true;
     if(pRoot1 -> value != pRoot2 -> value)
          return false;
     return DoTree1haveTree2(pRoot1 -> left,pRoot2 -> left) && DoTree1haveTree2(pRoot1 -> right,pRoot2 -> right);
}     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值