[Offer] to prove safety substructure 26. [trees] tree

Sub-tree

/**
 * 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 isSubStructure(TreeNode* A, TreeNode* B) {
        if(!A || !B) return false;
        //遍历树A中的所有非空节点R;
        if(isSame(A, B)) return true;
        //判断树A中以R为根节点的子树是不是包含和树B一样的结构,且我们从根节点开始匹配;
        return isSubStructure(A->left, B) || isSubStructure(A->right, B);
    }
    bool isSame(TreeNode *A, TreeNode *B){
        //如果树B中的节点为空,则表示当前分支是匹配的,返回true;
        if(!B) return true;
        //如果树A中的节点为空,但树B中的节点不为空,则说明不匹配,返回false;
        if(!A || A->val != B->val) return false;
        //如果两个节点都不为空,但数值不同,则说明不匹配,返回false;
        return isSame(A->left, B->left) && isSame(A->right, B->right);
    }
};

Guess you like

Origin www.cnblogs.com/Trevo/p/12655826.html