Subtree of Another Tree (Leetcode 572)

在这里给出两种做法,

第一种是直接搜索,O(n * m) 的worse case,

class Solution {
public:
    
    bool isSameTree(TreeNode* x, TreeNode* y){
        if(x == NULL && y == NULL) return true;
        else if(x == NULL || y == NULL) return false;
        if(x->val != y->val) return false;
        return isSameTree(x->left, y->left) && isSameTree(x->right, y->right);
    }

    bool isSubtree(TreeNode* s, TreeNode* t) {
        if(s == NULL && t == NULL) return true;
        else if(s == NULL || t == NULL) return false;
        if(isSameTree(s, t)) return true;
        return isSubtree(s->left, t) || isSubtree(s->right, t);
    }
};

第二种参考网上的思路,把树转化成string,然后再用find substring的办法。不过库函数的find substring一般也不用kmp,而是直接一个一个的搜索查找,所以复杂度也是 O(n * m) 级别. 两种方法leetcode runtime差不多

class Solution {
public:

    void serialize(TreeNode* root, string &s){
        if(root){
            s += '(' + to_string(root->val) + ')';
            s += ' ';
            serialize(root->left, s);
            serialize(root->right, s);
        }else{
            s += '#' + ' ';
        }
    }

    bool isSubtree(TreeNode* s, TreeNode* t) {
        if(!s && !t) return true;
        else if(!s || !t) return false;
        string s_string, t_string;
        serialize(s, s_string);
        serialize(t, t_string);
        return s_string.find(t_string) != string::npos;
    }
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,788评论 0 33
  • LeetCode 刷题随手记 - 第一部分 前 256 题(非会员),仅算法题,的吐槽 https://leetc...
    蕾娜漢默阅读 17,962评论 2 36
  • 仅仅开班四天,我就已经三次没有交作业了,违规次数已经用完,今早给组长留言要求退出,组长告知第四次违规才可会退群,鼓...
    潇湘2016阅读 245评论 0 0
  • 跌倒并不可怕,可怕的是跌倒后再也站不起来。 一生中我们总会遇到大大小小的许多事情,有成功也会有失败。上学的时候,最...
    周诗汶阅读 500评论 0 2