此题中是在给定的树中查找是否存在指定的子树
思路:先检查根节点,如果根节点和子树的根节点相同,则从根节点开始比较,否则继续在树的左子树和右子树中查找指定的子树。
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
bool HasTree(TreeNode* pRoot1,TreeNode* pRoot2)
{
if(pRoot1==nullptr&&pRoot2==nullptr)
return true;
if(pRoot1==nullptr&&pRoot2!=nullptr)
return false;
if(pRoot1!=nullptr&&pRoot2==nullptr)
return true;
if(pRoot1->val==pRoot2->val)
{
return HasTree(pRoot1->left,pRoot2->left)&&HasTree(pRoot1->right,pRoot2->right);
}
else
return false;
}
bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2)
{
if(pRoot1==nullptr&&pRoot2==nullptr)
return false;
if(pRoot1!=nullptr&&pRoot2==nullptr)
return false;
if(pRoot1==nullptr&&pRoot2!=nullptr)
return false;
bool result;
//根节点相同
if(pRoot1->val==pRoot2->val)
{
result=HasTree(pRoot1,pRoot2);
}
//若根节点不同,在左子树中寻找子树
if(!result)
result=HasSubtree(pRoot1->left,pRoot2);
//若左子树中未找到子树,在右子树中寻找子树
if(!result)
result=HasSubtree(pRoot1->right,pRoot2);
return result;
}
};