題目描述
輸入兩棵二叉樹A,B,判斷B是不是A的子結構。(ps:我們約定空樹不是任意一個樹的子結構)
提交代碼:
class Solution {
public:
bool is_same(TreeNode* pRoot1, TreeNode* pRoot2)
{
if (pRoot2==NULL)
{
return true;
}
if (pRoot1==NULL&&pRoot2!=NULL)
{
return false;
}
if (pRoot1->val!=pRoot2->val)
{
return false;
}
return is_same(pRoot1->left, pRoot2->left) && is_same(pRoot1->right, pRoot2->right);
}
bool is_sonTree(TreeNode* pRoot1, TreeNode* pRoot2)
{
if (pRoot1 == NULL&&pRoot2 != NULL)
{
return false;
}
if (pRoot2->val!=pRoot1->val)
{
return is_sonTree(pRoot1->left, pRoot2) || is_sonTree(pRoot1->right, pRoot2);
}
return is_same(pRoot1, pRoot2)||is_sonTree(pRoot1->left, pRoot2) || is_sonTree(pRoot1->right, pRoot2);
}
bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2)
{
bool b;
if (pRoot1==NULL||pRoot2==NULL)
{
return false;
}
b = is_sonTree(pRoot1, pRoot2);
return b;
}
};
測試代碼:
int main()
{
Solution *s = new Solution();
TreeNode *t1 = new TreeNode(8);
TreeNode *t2 = new TreeNode(8);
TreeNode *t3 = new TreeNode(7);
TreeNode *t4 = new TreeNode(9);
TreeNode *t5 = new TreeNode(2);
TreeNode *t6 = new TreeNode(4);
TreeNode *t7 = new TreeNode(7);
t1->left = t2; t1->right = t3; t2->left = t4; t2->right = t5; t3->left = t6; t3->right = t7;
TreeNode *tt1 = new TreeNode(8);
TreeNode *tt2 = new TreeNode(9);
TreeNode *tt3 = new TreeNode(2);
tt1->left = tt2; tt1->right == tt3;
bool out_tree =s->HasSubtree(t1,tt1);
cout << out_tree << endl;
system("pause");
return 0;
}
結果: