这里测试的结果为假设B是空二叉树,则B不是A 的子结构。
/*struct TreeNode {
int val;struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2)
{
if(pRoot1==NULL||pRoot2==NULL)//B或A为空二叉树,则B都不是A的子结构
return false;
else if(pRoot1->val==pRoot2->val)//当A的节点值与B的相同时判断B的左子树和右子树是否是A的左子树和右子树的子结构
{
if(pRoot2->left==NULL&&pRoot2->right==NULL)//B的左子树和右子树都为空,则B是A的子结构
return true;
else if(pRoot2->left==NULL)//如果B的左子树为空,检查B的右子树是否是A的右子树的子结构
return HasSubtree(pRoot1->right,pRoot2->right);
else if(pRoot2->right==NULL)
return HasSubtree(pRoot1->left,pRoot2->left);
else{
if( HasSubtree(pRoot1->left,pRoot2->left)&&HasSubtree(pRoot1->right,pRoot2->right))//B是A的子结构
return true;
else
return HasSubtree(pRoot1->left,pRoot2)||HasSubtree(pRoot1->right,pRoot2);//B是否是A的左子树或右子树的子结构
}
}
else
return HasSubtree(pRoot1->left,pRoot2)||HasSubtree(pRoot1->right,pRoot2);
}
};