题目描述
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
时间限制:1秒 空间限制:32768K 热度指数:269664
思想:根据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)
return false;
bool result=false;
if(pRoot1->val==pRoot2->val){
result=Root1hasRoot2(pRoot1,pRoot2);
}
if(result==false)
result=HasSubtree(pRoot1->left,pRoot2);
if(result==false)
result=HasSubtree(pRoot1->right,pRoot2);
return result;
}
bool Root1hasRoot2(TreeNode* tree1,TreeNode* tree2)
{
if(tree2==NULL)
return true;
if(tree1==NULL)
return false;
if(tree1->val!=tree2->val)
return false;
return Root1hasRoot2(tree1->left,tree2->left)&&Root1hasRoot2(tree1->right,tree2->right);
}
};
参考博客:https://blog.youkuaiyun.com/a784586/article/details/56486144?locationnum=4&fps=1