07序列化与反序列化二叉树
思路
序列化和反序列化二叉树其实是将二叉树转化为字符串,并且字符串再重新转化为二叉树,即树的遍历
其可以采用多种遍历方式将树转化为字符串,只需要反序列化的时候用同种遍历方式将字符串转化为树。
这里采用的是层次遍历
var string = [];
var serialize = function(root) {
let string = ''
if (!root) {
return '#'
} else {
let queue = [];
let parent = null;
queue.push(root);
string = root.val;
while (queue.length != 0) {
parent = queue.shift();
if (parent.left != null) {
string = string + ',' + parent.left.val;
queue.push(parent.left)
} else {
string = string + ',' + '#'
}
if (parent.right != null) {
string = string + ',' + parent.right.val;
queue.push(parent.right);
} else {
string = string + ',' + '#'
}
}
return string
}
};
/**
* Decodes your encoded data to tree.
*
* @param {string} data
* @return {TreeNode}
*/
var deserialize = function(data) {
data = data.split(",")
let root = null;
if (data[0] === '#') {
root = null;
return root;
} else {
let queue = [];
let index = 0;
let parent = null;
root = new TreeNode(data[index]);
queue.push(root);
index++;
while(queue.length != 0) {
parent = queue.shift();
if (index < data.length && data[index] != '#') {
parent.left = new TreeNode(data[index]);
queue.push( parent.left)
}
index++;
if (index < data.length && data[index] != '#') {
parent.right = new TreeNode(data[index]);
queue.push(parent.right)
}
index++;
}
return root
}
};