[剑指offer]面试题18:树的子结构

来源:互联网 发布:java设计网上购物商城 编辑:程序博客网 时间:2024/06/15 08:30

题目描述
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)

/*struct TreeNode {    int val;    struct TreeNode *left;    struct TreeNode *right;    TreeNode(int x) :            val(x), left(NULL), right(NULL) {    }};*/class Solution {public:    bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2)    {        // 约定空树不是任意一个树的子结构,空树直接返回false        if(pRoot1 != NULL && pRoot2 != NULL){            if(is(pRoot1, pRoot2))                return true;            return HasSubtree(pRoot1->left, pRoot2) || HasSubtree(pRoot1->right, pRoot2);        }        return false;    }    bool is(TreeNode* pRoot1, TreeNode* pRoot2){        if(pRoot2 == NULL)            return true;        if(pRoot1 == NULL)            return false;        if(pRoot1->val != pRoot2->val)            return false;        return is(pRoot1->left, pRoot2->left) && is(pRoot1->right, pRoot2->right);    }};