剑指offer系列-26 树的子结构

class Solution {
public:
    bool isSubStructure(TreeNode* A, TreeNode* B) {
        if(A==nullptr || B==nullptr) return false;
        // 当前子树包含子结构 || 左子树包含子结构 || 右子树包含子结构
        return dfs(A,B) || isSubStructure(A->left,B) || isSubStructure(A->right,B);
    }
    bool dfs(TreeNode* A,TreeNode* B){
        // 子结构B遍历结束
        if(B==nullptr) return true;
        // 子结构未遍历结束A就结束了
        if(A==nullptr) return false;
        // 确保节点值和结构相同
        return A->val==B->val && dfs(A->left,B->left) && dfs(A->right,B->right);
    }
};

 

你可能感兴趣的:(剑指offer,C++)