ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
## 序列化二叉树 请实现两个函数,分别用来序列化和反序列化二叉树 二叉树的序列化是指: >把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存。序列化可以基于先序、中序、后序、层序的二叉树遍历方式来进行修改,序列化的结果是一个字符串,序列化时通过 某种符号表示空节点(#),以 ! 表示一个结点值的结束(value!)。 **递归遍历二叉树的节点,空节点使用#代替,节点之间使用逗号隔开,返回字符串** 二叉树的反序列化是指: 根据某种遍历顺序得到的序列化字符串结果str,重构二叉树。 设置序号index,将字符串根据逗号分割为数组,根据index的值来设置树节点的val,如果节点的值为#,则返回空的树节点。 ``` var arr = []; function Serialize(pRoot) { if(pRoot==null){ arr.push('#'); return; } else { arr.push(pRoot.val); Serialize(pRoot.left); Serialize(pRoot.right); } return arr; } function Deserialize(s) { if(!arr||arr.length<=0){ return null; } var rootVal = arr.shift(); var root = null; if(typeof rootVal=='number'){ root = new TreeNode(rootVal); root.left = Deserialize(arr); root.right = Deserialize(arr); } return root; } ```