剑指 Offer 26. 树的子结构

dfs就好了

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    bool dfs(TreeNode* A, TreeNode* B, int flag)
    {
        if(B == NULL && flag == 1)
            return true;
        else if(A == NULL || B == NULL || A->val != B->val && flag == 1) return false;

        if(A->val == B->val)
        {
            bool f1 = dfs(A->left, B->left, 1);
            bool f2 = dfs(A->right, B->right, 1);
            if(f1 && f2) return true;
        }
        bool f1 = dfs(A->left, B, 0);
        bool f2 = dfs(A->right, B, 0);
        return f1 || f2;
    }

    bool isSubStructure(TreeNode* A, TreeNode* B) {
        if(B == NULL) return false;
        return dfs(A, B, 0);

    }
};
原文地址:https://www.cnblogs.com/WTSRUVF/p/15409107.html