二叉树 序列化和反序列化

109 阅读1分钟

题目

序列化:将二叉树转换成某种字符串保存到内存中,且每个不同二叉树序列化成的字符串是唯一的 反序列化:将字符串还原成二叉树

  • 序列化:约定空节点为#,非空节点以其value保存,且每个节点以_相连接,整体按照先序遍历的方式拼接
  • 反序列化:将字符串_分隔成数组,拿到每个节点,然后因为是先序遍历,所以以先序的方式生成二叉树

FB67116D-D59E-42CD-ACD7-B181E1A2E616.png

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;
}