题目描述
请实现两个函数,分别用来序列化和反序列化二叉树
分析
可以使用前序遍历的方法来得到二叉树的序列,然后再每个节点之间得使用一个" ! "来隔开,这样可以避免节点值之间的歧义;对于空节点也需要存储下来,所以使用" # "来存储。
反序列化就解析序列化字符串即可。
代码实现
function TreeNode(x) { this.val = x; this.left = null; this.right = null; } function Serialize(r) { if(r === null) return "#!"; var res = ""; var s = []; s.push(r); while(s.length !== 0){ var cur = s.pop(); res += (cur === null) ? "#" : cur.val; res += "!"; if(cur !== null) { s.push(cur.right); s.push(cur.left); } } return res; } function Deserialize(s) { if(s === "") return null; var arr = s.split("!"); return step(arr); } function step(arr) { var cur = arr.shift(); if(cur === "#") return null; var node = new TreeNode(cur); node.left = step(arr); node.right = step(arr); return node; }