日常小结-层序遍历的实现leetcode 297
2016-06-20 01:42
183 查看
层序遍历的实现leetcode 297-Serialize and Deserialize Binary Tree
最近在写leetcode的测试集,目前想实现一个输入string类型的数组得到对应树的去序列化程序。正好这题跟297其实是一个意思,然后就顺带看了下。看了几个最高赞的答案发现作者其实挺鸡贼的。几个答案都是按DFS方法做的。但是其实这几个方法得到的树结果貌似是错的。只是因为测试集先调用了序列化在调取序列化当然对了。不知道有没有其他没有注意到的地方。暂时看是这样。这些 先不管这些。这里简单介绍下层序遍历的实现。不过我这是野路子。不知道正规方法是什么样的。代码就不贴了网上有很多这里把思路总结下:
首先你需要一个队列。原因很简单。其实层序序列是BFS实现的队列里的对象相当于每层需要依次考虑的队列,泛泛的来谈的话,个人觉得DFS基本上是用栈,因为要把当前层需要考虑的问题前置,而BFS需要用队列因为需要按层次顺序考虑问题。这里的队列放置的就是每一层需要考虑的问题,也就是需要添加子节点的父节点。
其次,有了队列过后,需要知道的是这里并不像DFS那样将用迭代解决问题,这里用的是非迭代的问题。当队列里面没有值的时候也就说明当前当前队列里放的是最后一层的节点,且这些节点已经处理完了。
有了上面的分析基础解决问题就好解决了,具体的说:
初始化,创建根节点然后用res指针指向它,把它作为迭代的起始点,并将其放到队列中,接下来进入循环。
如果当前队列有节点,说明有子节点有空位,需要添加问题继续,否则问题终止。 进入循环后,首先把当前指针指向的队列中第一个节点出列。
判断流里的数据是否已经结束,如果没有结束则继续,创建一个节点把节点放入到当前cur指针的左端点,并把这个节点push到队列中,任务完成。
对当前节点的右分支做相同的操作。
不难判断以上问题的终止条件是队列为空。问题解决。
这里有一片博客里写了代码。我就不照抄了。
http://www.cnblogs.com/grandyang/p/4913869.html
相关文章推荐
- [沈航软工教学] 3、4班最终成绩排行榜
- Date、 Calendar、SimpleDateFormat类
- android笔记之首页框架搭建
- python学习笔记
- C声明中的指针
- error C2512: “HelloWorld”: 没有合适的默认构造函数可用
- ExtJS6-项目创建
- error C2512: “HelloWorld”: 没有合适的默认构造函数可用
- 腾讯 VS 阿里 VS 携程消息中间件设计方案及思路
- 你心目中最难忘的侯捷老师的文章有哪些???
- 视觉SLAM漫谈 (三): 研究点介绍
- java错误
- 8 个不得不说的 MySQL 陷阱
- rfs(robot_framewok)的搭建
- 横向滑动的HorizontalListView滑动指定位置的解决方法
- 视觉SLAM漫谈(二):图优化理论与G2O的使用
- 101个MySQL调试和优化技巧
- JavaScript检测原始值、引用值、属性
- 动态存储管理-第8章-《数据结构题集》习题解析-严蔚敏吴伟民版
- [Java] 类和接口的初始化步骤 - 继承方面