For example, you may serialize the following tree
1 | 1 |
as "[1,2,3,null,null,4,5]"
.
这道题看似简单,写起来真是费劲。。。要注意如下几点:
- 如何处理
int -> string
。如果每个节点的值都是个位数的话,那么只需要root->val + '0'
即可转化为字符。代码写起来也相对简单。但是考虑节点值有可能不止一位,我们必须采用其他方法。最先想到的是使用to_string()方法,应该可以实现我们想要的结果。后来看到网友写的使用ostringstream。感觉很巧妙,并且代码和前者一样简介,决定采用这种方法。 - 如何serialize。第一想法是按层遍历,但是这样会很难处理
nullptr
:如果事先不知道二叉树的层数,循环就无法跳出。因此,我们使用前序遍历来序列化整个二叉树,这样解码的时候也可以通过同样的顺序建树。 - 如何deserialize。如前面所说,不能简单利用队列按层构建二叉树,而要用前序遍历。同时,因为我们保存的字符串使用空格分隔,最快速的方法就是istringstream解析整数值。
1 | // leetcode 297. Serialize and Deserialize Binary Tree |