题目描述
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
分析
B是A的子结构分为几种情况:
1、B是空或者A是空,直接false;
2、B的根节点与A的根节点相等,而且左右子树都相同;
3、B的根节点和A不等,但是A的左子树或者右子树和B相同;
所以可以先设定递归函数为判断是否相同:isSameTree(TreeNode* pRoot1, TreeNode* pRoot2)。
代码实现
bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2)
{if(pRoot2==NULL || pRoot1 == NULL)
return false;
return isSameTree(pRoot1,pRoot2) ||
HasSubtree( pRoot1->left , pRoot2) ||
HasSubtree( pRoot1->right, pRoot2);
}
bool isSameTree(TreeNode* pRoot1, TreeNode* pRoot2)
{
if(pRoot1==NULL && pRoot2!=NULL)
return false;
if(pRoot2==NULL )
return true;
return ( pRoot1->val == pRoot2->val ) &&
isSameTree( pRoot1->left , pRoot2->left) &&
isSameTree( pRoot1->right, pRoot2->right);
}