该题还有kmp、数哈希等方法,目前先放置,之后研究
    方法一:两次递归嵌套,注意递归结束的条件

    1. /**
    2. * Definition for a binary tree node.
    3. * struct TreeNode {
    4. * int val;
    5. * TreeNode *left;
    6. * TreeNode *right;
    7. * TreeNode() : val(0), left(nullptr), right(nullptr) {}
    8. * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
    9. * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
    10. * };
    11. */
    12. class Solution {
    13. public:
    14. bool check(TreeNode* r, TreeNode* s){
    15. if(!r&&!s){
    16. return true;
    17. }else if(!r||!s){
    18. return false;
    19. }
    20. if(r->val!=s->val){
    21. return false;
    22. }
    23. bool b1=check(r->left,s->left);
    24. bool b2=check(r->right,s->right);
    25. return b1&&b2;
    26. }
    27. bool dfs(TreeNode* r, TreeNode* s){
    28. if(r==NULL){
    29. return false;
    30. }
    31. bool a1=check(r,s);
    32. bool a2=dfs(r->left,s);
    33. bool a3=dfs(r->right,s);
    34. return a1||a2||a3;
    35. }
    36. bool isSubtree(TreeNode* root, TreeNode* subRoot) {
    37. return dfs(root,subRoot);
    38. }
    39. };