题目
序列化:将二叉树转换成某种字符串保存到内存中,且每个不同二叉树序列化成的字符串是唯一的 反序列化:将字符串还原成二叉树
- 序列化:约定空节点为#,非空节点以其value保存,且每个节点以_相连接,整体按照先序遍历的方式拼接
- 反序列化:将字符串_分隔成数组,拿到每个节点,然后因为是先序遍历,所以以先序的方式生成二叉树
function serialize(node) {
if (!node) {
return "#_";
}
let str = node.value + "_";
str += serialize(node.left);
str += serialize(nod.right);
return str;
}
//反序列化
function deserialize(str) {
let nodes = str.split("_");
return reBuild(nodes);
}
function reBuild(arr) {
let tempNode = arr.shift();
if (tempNode == "#") {
return null;
}
//还原成节点
let node = new Node(tempNode);
node.left = reBuild(arr);
node.right = reBuild(arr);
return node;
}