題目描述
輸入兩棵二叉樹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.csdn.net/a784586/article/details/56486144?locationnum=4&fps=1