剑指offer-刷题笔记-中等题-JZ26 树的子结构
没有考虑到可能出现的为空的情况,导致后面节点为空,继续访问会出现报错
版本1-自己写的
class Solution {
public:
bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2) {
if(pRoot1 == NULL || pRoot2 == NULL)
{
return false;
}
if(pRoot1->val == pRoot2->val && (pRoot1->left->val == pRoot2->left->val || pRoot1->right->val == pRoot2->right->val))
{
return true;
}
else
{
return HasSubtree(pRoot1->left,pRoot2) || HasSubtree(pRoot1->right,pRoot2);
}
return false;
}
};
版本2
class Solution {
public:
bool recursion(TreeNode* root1, TreeNode* root2){
if(root1 == NULL && root2 != NULL)
return false;
if(root1 == NULL || root2 == NULL)
return true;
if(root1->val != root2->val)
return false;
return recursion(root1->left, root2->left) && recursion(root1->right, root2->right);
}
bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2) {
if(pRoot2 == NULL)
return false;
if(pRoot1 == NULL && pRoot2 != NULL)
return false;
if(pRoot1 == NULL || pRoot2 == NULL)
return true;
bool flag1 = recursion(pRoot1, pRoot2);
bool flag2 = HasSubtree(pRoot1->left, pRoot2);
bool flag3 = HasSubtree(pRoot1->right, pRoot2);
return flag1 || flag2 || flag3;
}
};