题目地址
https://leetcode-cn.com/problems/serialize-and-deserialize-binary-tree/
题目描述
1 | 序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。 |
解题思路
序列化与反序列化成对存在,可以有不同的序列化方法,但必须通过反序列化还原成先前的数据结构或对象。
二叉树的序列化可以理解成是将二维结构转化为一维的数组或字符串,但考虑到节点的值可能为负数,数组更为合适。
本例采用前序遍历的方式,将二叉树转化为数组,其中空节点的值用‘#’代替。
本来通过前序遍历的结果是没办法还原二叉树的,至少也要前中后序遍历中的两个,但序列化后的结果包括二叉树中空指针的信息,所以反序列化是可行的。
反序列化过程也是一样,先确定根节点 root,然后遵循前序遍历的规则,递归生成左右子树。
代码实现 此例有待优化
1 | javascript |