树的子结构

输入2棵二叉树A和B,判断B是不是A的子结构。

解决步骤分为2步:第一步找到树A中与树B根节点的值相同的节点R,第二部判断树A中以节点R为根节点的子树是否包含与树B一样的结构。

采用递归方法可以得到如下代码:

struct BinaryTreeNode
{
    int value;
    BinaryTreeNode* p_left;
    BinaryTreeNode* p_right;
};

bool DoesTree1HaveTree2(BinaryTreeNode* pRoot1, BinaryTreeNode* pRoot2)
{
    if( pRoot2 == NULL )
        return true;
    if( pRoot1 == NULL)
        return false;

    if( pRoot1->value != pRoot2->value )
        return false;

    return DoesTree1HaveTree2(pRoot1->p_left,pRoot2->p_left) && DoesTree1HaveTree2(pRoot1->p_right,pRoot2->p_right);
}

bool HasSunTree(BinaryTreeNode* pRoot1, BinaryTreeNode* pRoot2)
{
    bool result = false;
    if( pRoot1 !=NULL && pRoot2 != NULL)
    {
        if(pRoot1->value == pRoot2->value )
            result = DoesTree1HaveTree2(pRoot1,pRoot2);
        if(!result)
            result = HasSunTree(pRoot1->p_left,pRoot2);
        if(!result)
            result = HasSunTree(pRoot1->p_right,pRoot2);
    }
    return result;
}

代码比较简洁易懂就不做注释了

posted @ 2013-03-04 14:32  没离开过  阅读(113)  评论(0)    收藏  举报