这么水的题居然搞了这么久。。
总结就是判断当前是不是 ,不是就判断左子树是不是,不是就判断右子树
判断当前两个树是否是一个
那么判断当前拿到的节点两个是否空
再讨论当前节点是否相等,再到下一层
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
bool compare(TreeNode* pRoot1, TreeNode* pRoot2) {
if (pRoot2 == NULL) {
return true;
}
if (pRoot1 == NULL) {
return false;
}
if (pRoot1->val != pRoot2->val) {
return false;
}
return compare(pRoot1 -> left, pRoot2 -> left) &&
compare(pRoot1 -> right, pRoot2 -> right);
}
bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2)
{
bool flag = false;
if (pRoot1 != NULL && pRoot2 != NULL) {
if (pRoot1->val == pRoot2->val) {
flag = compare(pRoot1, pRoot2);
}
if (!flag) {
flag = HasSubtree(pRoot1->left, pRoot2);
}
if (!flag) {
flag = HasSubtree(pRoot1->right, pRoot2);
}
}
return flag;
}
};