剑指offer题目记录(长期更新)
2016-01-14 20:44
302 查看
1、树
输入两颗二叉树A,B,判断B是不是A的子结构。
大致的想了一下,对A的每个节点进行判断,是不是B中所有节点都能找到,写了下面臃肿的代码,自己验证通过,提交时说是:
发生段错误,可能是数组越界,堆栈溢出(比如,递归调用层数太多)等情况引起
没发现明显的越界错误,猜想大概是递归太多导致的,记录下来以待后面验证。代码如下:
查看讨论区,发现可能是这句话的原因:
改为:
通过了测试。
输入两颗二叉树A,B,判断B是不是A的子结构。
大致的想了一下,对A的每个节点进行判断,是不是B中所有节点都能找到,写了下面臃肿的代码,自己验证通过,提交时说是:
发生段错误,可能是数组越界,堆栈溢出(比如,递归调用层数太多)等情况引起
没发现明显的越界错误,猜想大概是递归太多导致的,记录下来以待后面验证。代码如下:
///* 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 true; if(Subtree(pRoot1,pRoot2))return true; else if((pRoot1->left!=NULL)&&HasSubtree(pRoot1->left,pRoot2)) return true; else if((pRoot1->right!=NULL)&&HasSubtree(pRoot1->right,pRoot2)) return true; else return false; } bool Subtree(TreeNode* p1, TreeNode* p2) { if(p1==NULL&&p2==NULL)return true; else if(p2==NULL) return true; else if(p1==NULL) return false; if(p1->val!=p2->val)return false; if(!Subtree(p1->left,p2->left)) return false; if(!Subtree(p1->right,p2->right)) return false; return true; } };
查看讨论区,发现可能是这句话的原因:
if(pRoot1==NULL&&pRoot2==NULL)return true;
改为:
if(pRoot1==NULL||pRoot2==NULL)return false;
通过了测试。
相关文章推荐
- node.js学习笔记之正则表达式
- jquery效果
- 20160114html学习笔记表单框架颜色脚本字符实体
- jquery 动画效果插件
- css处理浏览器兼容问题
- HTML5(二) canvas基础
- 说说JSON和JSONP,也许你会豁然开朗
- AngularJS学习笔记1
- js命名空间
- html5 canvas 画布基础
- Jersey支持json格式
- IE11的CSS兼容性问题
- js时间显示器及页面返回程序
- jQuery 对象和 json 之间的转换
- JQuery easyUI分页
- 20160113html学习笔记区块网页布局
- css选择元素时有没有空格的区别
- CSS代码重构
- AngularJS进阶(二十八)解决AngualrJS页面刷新导致异常显示问题
- AngularJS进阶(二十八)解决AngualrJS页面刷新导致异常显示问题