leetcode & 剑指 Offer 26. 树的子结构

Posted Z-Pilgrim

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode & 剑指 Offer 26. 树的子结构相关的知识,希望对你有一定的参考价值。

力扣

两种写法

1、一个Dfs

check的作用是: 比如B节点是1 2  不用check的话 可能只要A包含了1和2节点,哪怕不是连着的,也会返回true

class Solution 
public:
    bool isSubStructure(TreeNode* A, TreeNode* B) 
        if( A && !B) return false;
        
        return sub(A, B, 0);
    

    bool sub(TreeNode* A, TreeNode* B, int check) 
        if(!B) return true;
        if(!A) return false;
        
        if (A->val == B->val) 
            if(check) return (sub(A->left, B->left, 1) && sub(A->right, B->right, 1));
            else
                return (sub(A->left, B->left,1) && sub(A->right, B->right,1)) || (
                sub(A->left, B,0) || sub(A->right, B,0)
            ) ;
         else 
            if(check) return false;
            return sub(A->left, B, 0) || sub(A->right, B, 0);
        
    
;

2、两个dfs

class Solution 
public:
    bool isSubStructure(TreeNode* A, TreeNode* B) 
        if( A && !B) return false;
        
        return sub(A, B, 0);
    

    bool sub(TreeNode* A, TreeNode* B, int check) 
        if(!B) return true;
        if(!A) return false;
        
        if (A->val == B->val) 
            if(check) return (sub(A->left, B->left, 1) && sub(A->right, B->right, 1));
            else
                return (sub(A->left, B->left,1) && sub(A->right, B->right,1)) || (
                sub(A->left, B,0) || sub(A->right, B,0)
            ) ;
         else 
            if(check) return false;
            return sub(A->left, B, 0) || sub(A->right, B, 0);
        

以上是关于leetcode & 剑指 Offer 26. 树的子结构的主要内容,如果未能解决你的问题,请参考以下文章

剑指offer:表示数值的字符串

求 1+2+3+...+n --剑指offer

剑指Offer - 平衡二叉树

《剑指offer》---顺时针打印矩阵

剑指offer(五十五)之表示数值的字符串

剑指offer之丑数☆