剑指 Offer 37. 序列化二叉树
// “抄”了一遍....
var serialize = function (root) {
if(!root) return '[]';
let queue = [];
queue.push(root);
let store = [];
while (queue.length) {
let top = queue.shift();
if (top == null) {
store.push('null');// 防止null被toString清除
}
else {
store.push(String(top.val));
queue.push(top.left);
queue.push(top.right);
}
}
return '['+store.toString()+']';
};
/**
* Decodes your encoded data to tree.
*
* @param {string} data
* @return {TreeNode}
*/
var deserialize = function (data) {
if(data=='[]') return null;// 不能return [],这是一个地址。
data = data.replace('[','');
data = data.replace(']','');
let store = data.split(',');// 删除收尾括号后才能拆分
let i = 1;
let root = new TreeNode(Number(store[0]));
let queue = [root];
while(i<store.length){
let top = queue.shift();
if(store[i]!='null'){// 若为空,结点的空子节点并不会显示。
top.left = new TreeNode(Number(store[i]));
queue.push(top.left);
}
i++;
if(store[i]!='null'){
top.right = new TreeNode(Number(store[i]));
queue.push(top.right);
}
i++;
}
return root;
};
// 优化一下
var serialize = function(root) {
if(!root) return '[]';
let queue = [root];
let res = [];
while(queue.length){
let pop = queue.shift();
if(!pop){
res.push('#');
continue;
}
res.push(pop.val);
queue.push(pop.left);
queue.push(pop.right);
}
return '['+res.toString()+']';
};
/**
* Decodes your encoded data to tree.
*
* @param {string} data
* @return {TreeNode}
*/
var deserialize = function(data) {
if(data=='[]') return null;
// data = data.replace('[','');
// data = data.replace(']','');
// let store = data.split(',');
let store = data.substring(1,data.length-1).split(',')
let index = 1;
let root = new TreeNode(store[0]);
let queue = [root];
while(queue.length){
let top = queue.shift();
if(store[index]!='#'){
top.left = new TreeNode(store[index]);
queue.push(top.left);
}
index++;
if(store[index]!='#'){
top.right = new TreeNode(store[index]);
queue.push(top.right);
}
index++;
}
return root;
};