题目描述
请实现两个函数,分别用来序列化和反序列化二叉树
分析
可以使用前序遍历的方法来得到二叉树的序列,然后再每个节点之间得使用一个" ! "来隔开,这样可以避免节点值之间的歧义;对于空节点也需要存储下来,所以使用" # "来存储。
反序列化就解析序列化字符串即可。
代码实现
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;
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。