剑指offer-算法题练习:part19 树的子结构

来源:互联网 发布:淘宝产品图片尺寸留白 编辑:程序博客网 时间:2024/06/05 10:51

剑指offer-算法题练习:part19 树的子结构

时间限制:1秒空间限制:32768K

题目描述

输入两棵二叉树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 {    bool isSubtree(TreeNode* pRoot1,TreeNode* pRoot2){        //if(pRoot1==NULL) return false;//        if(pRoot2==NULL) return true;//此处不是判断2为空树时,不是1的子树,而是递归时上一层的proot2匹配结束了        //此处为pRoot2 == null 是匹配完成的条件        //最开始pRoot2肯定不为NULL,这是在主程序HasSubtree中判断过的。        //递归中,如果pRoot2为空了,则表示上一层的递归中的pRoot2已经匹配完了        if(pRoot1==NULL) return false;//1为A,2为B,1为空,则2不是1的子树        if(pRoot2->val == pRoot1->val){            return isSubtree(pRoot1->left,pRoot2->left)&&                   isSubtree(pRoot1->right,pRoot2->right);        }//if        else return false;       // 其中需要注意的是:    }public:    bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2)    {        if(pRoot1==NULL||pRoot2==NULL) return false;        //else        return isSubtree(pRoot1, pRoot2) ||            HasSubtree(pRoot1->left, pRoot2) ||            HasSubtree(pRoot1->right, pRoot2);    }};//1. 测试用例如果pRoot2为空的话,返回的false而不是我们认为的空树,应该是所有树的子树//2. 再判断是否子树的过程中,应该先判断pRoot2是否为空,为空则表明子树的所有节点都比较完了,      //应该是子树返回True//3. 对任何一个树节点进行访问时,一定要提前检测该节点是否为空




0 0