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(第 2 版)完整题解笔记 & C++代码实现(LeetCode版)

LeetCode 剑指 Offer 24. 反转链表

[LeetCode]剑指 Offer 24. 反转链表

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

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

「LeetCode」剑指 Offer 40. 最小的k个数