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. 树的子结构的主要内容,如果未能解决你的问题,请参考以下文章

*leetcode 343. 整数拆分 & 剑指offer 14

*leetcode 343. 整数拆分 & 剑指offer 14

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

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

LeetCode(剑指 Offer)- 64. 求1+2+…+n

C++&Python描述 LeetCode C++&Python描述 LeetCode 剑指 Offer 22. 链表中倒数第k个节点