您的位置:首页 > 其它

日常小结-层序遍历的实现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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: