该题还有kmp、数哈希等方法,目前先放置,之后研究
方法一:两次递归嵌套,注意递归结束的条件
/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/class Solution {public:bool check(TreeNode* r, TreeNode* s){if(!r&&!s){return true;}else if(!r||!s){return false;}if(r->val!=s->val){return false;}bool b1=check(r->left,s->left);bool b2=check(r->right,s->right);return b1&&b2;}bool dfs(TreeNode* r, TreeNode* s){if(r==NULL){return false;}bool a1=check(r,s);bool a2=dfs(r->left,s);bool a3=dfs(r->right,s);return a1||a2||a3;}bool isSubtree(TreeNode* root, TreeNode* subRoot) {return dfs(root,subRoot);}};
