- 主体思路就是,前序遍历这颗树,遇到值相同的,用另一个函数判断是否完全一致,不完全一致继续遍历(因为后面可能才出现子树相同的结构),否则返回true。
- 判断函数,很多细节见代码。
class Solution {
public:
bool isSubtree(TreeNode* s, TreeNode* t) {
if(s == NULL) return false;
if(s->val == t->val){
if(check(s,t)) return true;
}
return isSubtree(s->left,t) || isSubtree(s->right,t);
}
bool check(TreeNode* s,TreeNode* t){
if(s == NULL && t == NULL) return true;
if(s == NULL || t == NULL) return false;
if(s->val == t->val)
return check(s->left,t->left) && check(s->right,t->right);
return false;
}
};