题目
My way
手动队列序列化 + 手动出队反序列化
因为C++ STL没有split
, boost
里面有。
所以考虑自己实现一个split
函数。
1 | vector<string> splitStrToStrArray(string s, string delimiter) |
根据题意要求写了个如下的出来,包括测试用例:
1 |
|
但是发现这个过不了测试用例,然后输出后发现为
[1,2,3,null,null,4,5,null,null,null,null,]
而不是要求的:
[1,2,3,null,null,4,5]
所以应该是说,最下面一层叶子要序列化它的null
孩子。
Ting Yu way
1 | class Codec { |
官方
Binary Search Tree
的序列化本质上是对其值进行编码,更重要的是对其结构进行编码。
可以遍历树来完成上述任务。众所周知,我们有两个一般策略:
- 广度优先搜索(BFS) 我们按照高度的顺序从上到下逐级扫描树。更高级别的节点将先于较低级别的节点访问。
- 深度优先搜索(DFS)
- 在这个策略中,我们采用深度作为优先顺序,这样我们就可以从一个根开始,一直延伸到某个叶,然后回到根,到达另一个分支。
- 根据根节点、左节点和右节点之间的相对顺序,可以进一步将DFS策略区分为 preorder、inorder 和 postorder 。
然而,在这个任务中,DFS 策略更适合我们的需要,因为相邻节点之间的链接自然地按顺序编码,这对后面的反序列化任务非常有帮助。
因此,在这个解决方案中,我们用 preorder DFS 策略演示了一个示例。您可以在 leetcode explore上查看有关二叉搜索树的更多教程。
1 | /** |
总结
- 利用
sstream
里的istringstream
和ostringstream
来解决字符串相关问题,是我之前没想到的
Reference
https://stackoverflow.com/questions/14265581/parse-split-a-string-in-c-using-string-delimiter-standard-c
https://leetcode-cn.com/problems/serialize-and-deserialize-binary-tree/solution/c-version-by-zzyuting/