1.题目
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
2.思路
这个题主要分两步:
第一步是在以s为根节点的树中寻找和t相等的节点。
找到这个节点之后,判断以这两个节点为根节点的子树是否相同
没找到就继续寻找。
3.题解
class Solution {
public:
bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2)
{
if(pRoot1 == nullptr || pRoot2 == nullptr)
return false;
bool res = false;
if(pRoot1->val == pRoot2->val)
res = isSame(pRoot1, pRoot2);
if(!res)
res = HasSubtree(pRoot1->left, pRoot2) || HasSubtree(pRoot1->right, pRoot2);
return res;
}
bool isSame(TreeNode* s, TreeNode* t)
{
if(t == nullptr)
return true;
if(s == nullptr)
return false;
if(s->val != t->val)
return false;
return isSame(s->left, t->left) && isSame(s->right, t->right);
}
};