- 有一颗树为空,返回false;
- 比较当前子树匹配是否相同,左右子树匹配是否相同;
- 匹配条件:
- 子树为NULL,返回true;
- 主树为NULL或主树值与子树值不相等,返回false;
- 继续比较各自子树。
/*
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* root1, TreeNode* root2) {
if (root2 == NULL) return true;
if (root1 == NULL || root1->val != root2->val) return false;
return compare(root1->left, root2->left) && compare(root1->right, root2->right);
}
bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2) {
if (pRoot1 == NULL || pRoot2 == NULL) return false;
return compare(pRoot1, pRoot2) || HasSubtree(pRoot1->left, pRoot2) || HasSubtree(pRoot1->right, pRoot2);
}
};