297. 二叉树的序列化与反序列化

https://leetcode-cn.com/problems/serialize-and-deserialize-binary-tree/

思路很直接,先写一个序列化函数将树按某个顺序(前、中、后、层序)遍历输出,再写一个反序列化函数用相同的遍历方法将其还原。下面尝试分别用前后序和层序,注意中序无法反序列化,因为根节点在序列的位置不确定

一、前序

注意:一般语境下,单单前序遍历结果是不能还原二叉树结构的,因为缺少空指针的信息,至少要得到前、中、后序遍历中的两种才能还原二叉树。但是这里的 node 列表包含空指针的信息,所以只使用 node 列表就可以还原二叉树。

观察可知node第一个元素就是根节点(关键),即1是后面数组的根。之后2是左子树的根,再之后是null,即2的左子为空,再之后是4,即2的右子树根为4……以此类推

每次取第一个元素,之后递归数组即可

二、后序

与前序相反,最后一个就是根节点

三、层序

构造也是借鉴遍历树的思路,维护一个队列,此外设置一个游标帮助遍历序列

最后更新于