[剑指offer]树的子结构

来源:互联网 发布:windows播放器解码器 编辑:程序博客网 时间:2024/06/05 06:53

题目描述

输入两颗二叉树A,B,判断B是不是A的子结构。

分析:这是百度实习生笔试的一道题。所以说刷题还是有必要的,然而。。。

第一次出错,直接递归,如果根元素相同,那么递归2的左子树是不是1的左子树的子结构,2的右子树是不是1的子结构,这是不对的,因为就算1的左子树中能找到2的左子树,但是这个不一定和根元素连着呀,所以这样是不对的。应该再写一个判断函数,判断2是不是与1根相同的一个子结构。

第二次出错,如果1和2根元素相同,进入判断函数判断,这步判断完如果结果是false的话,就要继续判断hassubtree,而不是直接返回false。。有点不清楚。。就是一句话的位置弄错了

/*struct TreeNode {int val;struct TreeNode *left;struct TreeNode *right;TreeNode(int x) :val(x), left(NULL), right(NULL) {}};*/class Solution {public:    bool IsSubtree(TreeNode* pRoot1, TreeNode* pRoot2)    {if(pRoot2==NULL) return true;        if(pRoot1==NULL) return false;if(pRoot1->val==pRoot2->val){            return IsSubtree(pRoot1->left,pRoot2->left)&&IsSubtree(pRoot1->right,pRoot2->right);        }else{            return false;        }    }    bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2){        bool ret=false;        if(pRoot1!=NULL&&pRoot2!=NULL){            if(pRoot1->val==pRoot2->val){                ret=IsSubtree(pRoot1,pRoot2);                if(!ret){                    ret=(HasSubtree(pRoot1->left,pRoot2)||HasSubtree(pRoot1->right,pRoot2));                }            }        }        return ret;    }};


0 0
原创粉丝点击