题目描述
输入两棵二叉树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;
}
结果: