0297.二叉树的序列化与反序列化
题目大意
二叉树的序列化与反序列化
思路与代码
广度优先遍历
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* Encodes a tree to a single string.
*
* @param {TreeNode} root
* @return {string}
*/
var serialize = function (root) {
let ret = [];
const queue = [root];
while (queue.length) {
const n = queue.length;
for (let i = 0; i < n; i++) {
const node = queue.shift();
if (node) {
ret.push(node.val);
queue.push(node.left);
queue.push(node.right);
} else {
ret.push(null);
}
}
}
while (ret[ret.length - 1] === null) {
ret.pop();
}
return ret.toString();
};
/**
* Decodes your encoded data to tree.
*
* @param {string} data
* @return {TreeNode}
*/
var deserialize = function (data) {
if (!data.length) return null;
const arr = data.split(',').map((e) => (e ? new TreeNode(Number(e)) : null));
const root = arr.shift();
let queue = [root];
let nextQueue = [];
while (arr.length) {
for (let i = 0; i < queue.length; i++) {
if (arr[0]) {
queue[i].left = arr[0];
nextQueue.push(arr[0]);
}
arr.shift();
if (arr[0]) {
queue[i].right = arr[0];
nextQueue.push(arr[0]);
}
arr.shift();
}
queue = nextQueue;
nextQueue = [];
}
return root;
};
/**
* Your functions will be called as such:
* deserialize(serialize(root));
*/空间复杂度:O(n)
时间复杂度:O(n)
深度优先遍历
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* Encodes a tree to a single string.
*
* @param {TreeNode} root
* @return {string}
*/
var serialize = function (root) {
return se(root, '');
};
const se = (node, ret) => {
if (!node) {
ret += 'None,';
} else {
ret += node.val + ',';
ret = se(node.left, ret);
ret = se(node.right, ret);
}
return ret;
};
/**
* Decodes your encoded data to tree.
*
* @param {string} data
* @return {TreeNode}
*/
var deserialize = function (data) {
return de(data.split(','));
};
const de = (dataList) => {
if (dataList[0] === 'None') {
dataList.shift();
return null;
}
const root = new TreeNode(parseInt(dataList[0]));
dataList.shift();
root.left = de(dataList);
root.right = de(dataList);
return root;
};
/**
* Your functions will be called as such:
* deserialize(serialize(root));
*/空间复杂度:O(n)
时间复杂度:O(n)
