面试题26 树的子结构

题目:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)

思路:第一步:现在A中找到与B的根节点一样值的节点R

          第二步:判断A中以R为根节点的子树是否包含和B一样的子结构。


class Solution {
public:
    bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2)
    {
        bool result=false;
        if(pRoot1!=NULL&&pRoot2!=NULL)
        {
            if(pRoot1->val==pRoot2->val)
                result=issub(pRoot1,pRoot2);
            if(!result)
                result=HasSubtree(pRoot1->left,pRoot2);
            if(!result)
                result=HasSubtree(pRoot1->right,pRoot2);
        }
        return result;
    }
    bool issub(TreeNode*pRoot1,TreeNode* pRoot2)
    {
        if( pRoot2==NULL)       // 如果B树遍历完了,说明是A的子树
            return true;
        if( pRoot1==NULL)       // 如果A树遍历完了,而B没遍历完,说明不是A的子树
            return false;
        if(pRoot1->val!=pRoot2->val)
            return false;
        return issub(pRoot1->left,pRoot2->left)&&issub(pRoot1->right,pRoot2->right);   //递归判断
    }
};

猜你喜欢

转载自blog.csdn.net/qq_42209189/article/details/81011979