c_cpp 572.另一棵树的子树

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 572.另一棵树的子树相关的知识,希望对你有一定的参考价值。

//Runtime: 28 ms, faster than 30.42%

class Solution {
public:
    bool isSubtree(TreeNode* s, TreeNode* t) {
        if(!s) return false;
        if(isSame(s,t)) return true;
        
        return isSubtree(s->left,t) || isSubtree(s->right,t);
    }
    
    bool isSame(TreeNode* s,TreeNode* t){
        if(!s && !t) return true;
        if(!s || !t) return false;
        if(s->val != t->val) return false;
        
        return isSame(s->left,t->left) && isSame(s->right,t->right);
    }
};
//Runtime: 28 ms, faster than 30.42%

class Solution {
    vector<TreeNode*> nodes;
public:
    bool isSubtree(TreeNode* s, TreeNode* t) {
        if(!s && !t) return true;
        if(!s || !t) return false;
        
        getDepth(s,getDepth(t,-1));
        
        for(TreeNode* n : nodes)
            if(identical(n,t))
                return true;
        
        return false;
    }
    
    int getDepth(TreeNode* r,int d){
        if(!r)
            return -1;
        
        int depth = max(getDepth(r->left,d),getDepth(r->right,d)) + 1;
        
        if(depth == d)
            nodes.push_back(r);
        
        return depth;
    }
    
    bool identical(TreeNode* a,TreeNode* b){
        if(!a && !b) return true;
        if(!a || !b || a->val != b->val) return false;
        
        return identical(a->left,b->left) && identical(a->right,b->right);
    }
};

以上是关于c_cpp 572.另一棵树的子树的主要内容,如果未能解决你的问题,请参考以下文章

572. 另一棵树的子树

572. 另一棵树的子树

572. 另一棵树的子树

572. 另一棵树的子树

572. 另一棵树的子树

LeetCode Algorithm 572. 另一棵树的子树