思路——双重递归
- 检查是否相等——true false check
- 检查根节点是否相等 左子树 右子树呢? check dfs dfs
代码
class Solution {
public:
//检查是否相等
bool check(TreeNode *o, TreeNode *t) {
if (!o && !t)
return true;
if ((o && !t) || (!o && t) || (o->val != t->val))
return false;
return check(o->left, t->left) && check(o->right, t->right);
}
//递归查找
bool dfs(TreeNode *o, TreeNode *t) {
if (!o)
return false;
return check(o, t) || dfs(o->left, t) || dfs(o->right, t);
}
//调用
bool isSubtree(TreeNode *s, TreeNode *t) {
return dfs(s, t);
}
};