剑指Offer系列-面试题18:树的子结构

来源:互联网 发布:淘宝 处罚考试 编辑:程序博客网 时间:2024/06/09 12:24

题目:输入两颗二叉树A和B,判断B是不是A的子结构。二叉树结点的定义如下:

struct BinaryTreeNode{    int m_nValue;    BinaryTreeNode* m_pLeft;    BinaryTreeNode* m_pRight;};

思路:需要多次判断指针为NULL时的情况,这也是递归结束的标识。

代码:

bool DoesTree1HaveTree2(BinaryTreeNode* pRoot1, BinaryTreeNode* pRoot2){    if(pRoot2 == NULL)        return true;    if(pRoot1 == NULL)        return false;    if(pRoot1->m_nValue != pRoot2->m_nValue)        return false;    return DoesTree1HaveTree2(pRoot1->m_pLeft, pRoot2->m_pLeft) && DoesTree1HaveTree2(pRoot1->m_pRight, pRoot2->m_pRight);}bool HasSubtree(BinaryTreeNode* pRoot1, BinaryTreeNode* pRoot2){    bool result = false;    if(pRoot1 != NULL && pRoot2!= NULL)    {        if(pRoot1->m_nValue == pRoot2->m_nValue)            result = DoesTree1HaveTree2(pRoot1, pRoot2);        if(!result)            result = HasSubtree(pRoot1->m_pLeft, pRoot2);        if(!result)            result = HasSubtree(pRoot1->m_pRight, pRoot2);    }    return result;}


0 0