码迷,mamicode.com
首页 > 其他好文 > 详细

判断A树是否包含B树结构

时间:2014-06-10 08:27:18      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:c   style   class   blog   code   java   

题目:输入两棵二叉树A和B,判断B是不是A的子结构

分析:根据数的遍历方法,首先想到的是采用递归的方式要更简单些,树A从根节点进行遍历,首先判断与B的根节点值是否相等,如果相等则进行递归遍历验证,否则验证树A的其他节点,直到所有的结点遍历完。

注意的就是指针是否为NULL,因为自己编程能力不好,所以有些很简单的也做了注释,方便以后自己理解。

bubuko.com,布布扣
//判断B是不是A的子树
struct BinaryTree{
    int  m_value;
    BinaryTree * LeftTree;
    BinaryTree * RightTree;
};
bool DoesHasSubTree(BinaryTree *pRoot1,BinaryTree *pRoot2);
bool HasSubTree(BinaryTree * pRoot1,BinaryTree * pRoot2)
{
    
    //当结点不相同的时候怎么去遍历其他的结点呢?
    //这里采用的方法是设置一个result,当result=false时候我们并不是直接结束程序,而是继续去遍历其他点,直到所有的点都遍历完
    //这里hasSubTree函数主要是为了遍历结点,而真正进行匹配是由函数DoesHasSubTree来实现
    bool result=false;

    if(pRoot1!=NULL&&pRoot2!=NULL)  //除此之外的所有情况我们都认为是不包含子树的,条件是不能丢的
    {
        if(pRoot1->m_value==pRoot2->m_value)          //一旦查到有结点相同,就进行递归遍历进行匹配见下面函数
            result=DoesHasSubTree(pRoot1,pRoot2)      //这个函数式递归函数,所以在里面还需要进行判断pRoot1->m_value==pRoot2->m_value是否相等
            if(!result)                                  //遍历了根节点接下来从左子树开始遍历,(递归的作用是左子树变成根节点进行匹配。)有点类似深度优先搜索。
                result=HasSubTree(pRoot1->LeftTree,pRoot2->LeftTree); 
            if(!result)                                  //当所有左子树没有匹配到我们就开始匹配右子树,直到所有的结点遍历完。
                result=HasSubTree(pRoot1->RightTree,pRoot2->RightTree);        
    }    
    return result;//返回最终的结果    
}
bool DoesHasSubTree(BinaryTree *pRoot1,BinaryTree *pRoot2)
{
    if(pRoot2==NULL)        //当子树遍历完的标志,可以遍历完说明过程中没有碰到false条件,也就是都是匹配的
        return true;
    if(pRoot1==NULL)
        return false;

    if(pRoot1->m_value!=pRoot2->m_value)
        return false;
    return DoesHasSubTree(pRoot1->LeftTree,pRoot2->LeftTree)&& DoesHasSubTree(pRoot1->RightTree,pRoot2->RightTree);  //用&&对左右两边都进行判断    
}   
bubuko.com,布布扣

 

判断A树是否包含B树结构,布布扣,bubuko.com

判断A树是否包含B树结构

标签:c   style   class   blog   code   java   

原文地址:http://www.cnblogs.com/menghuizuotian/p/3778600.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!