剑指offer:树的子结构

来源:互联网 发布:积分管理数据库设计 编辑:程序博客网 时间:2024/06/09 22:55

题目描述

输入两棵二叉树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)    {         if(pRoot1 == NULL || pRoot2 == NULL)              return 0;         queue<TreeNode*> q;         q.push(pRoot1);         while(!q.empty())          {                TreeNode* node = q.front();                if(node->val == pRoot2->val)                 {                   if(1 == isCotain(node, pRoot2))                      return 1;                }                q.pop();                if(NULL != node->left)                    q.push(node->left);                if(NULL != node->right)                    q.push(node->right);          }         return 0;    }        bool isCotain(TreeNode* pRoot1, TreeNode* pRoot2)    {        if(NULL == pRoot2)            return 1;        else if(NULL == pRoot1)            return 0;        else if(pRoot1->val == pRoot2 -> val)            return isCotain(pRoot1->left,  pRoot2->left) && isCotain(pRoot1->right,  pRoot2->right);        return 0;    }};


0 0
原创粉丝点击