树的子结构

来源:互联网 发布:淘宝网司法房产拍卖 编辑:程序博客网 时间:2024/05/21 17:42

题目描述

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


这里关键是用了两个递归,一个用来遍历树A找到与B根节点相等的节点,找到后用另外一个递归,判断A的以那个节点为根的子树是否含有与B的子树相同的结构。

代码:

/*struct TreeNode {    int val;    struct TreeNode *left;    struct TreeNode *right;    TreeNode(int x) :            val(x), left(NULL), right(NULL) {    }};*///用两个递归,第一个递归遍历树1class Solution {public:    bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2)    {        bool re=false;        if(pRoot1==NULL||pRoot2==NULL)            return false;        if(pRoot1->val==pRoot2->val)            re=DoesSubtreeEqual(pRoot1,pRoot2);        if(!re)            re=HasSubtree(pRoot1->left,pRoot2);        if(!re)            re=HasSubtree(pRoot1->right,pRoot2);        return re;         }    //判断以p1为根节点的树1是否和树2有相同的结构    bool DoesSubtreeEqual(TreeNode* p1,TreeNode* p2){        if(p1==NULL&&p2!=NULL)            return false;        if(p2==NULL)            return true;        if(p1->val!=p2->val)            return false;        return DoesSubtreeEqual(p1->left,p2->left)&&DoesSubtreeEqual(p1->right,p2->right);    }};


0 0
原创粉丝点击