题目:输入两棵二叉树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); //递归判断
}
};