二叉樹(shù)序列化與反序列化
- Runtime: 172 ms, faster than 42.05%
- Memory Usage: 49.5 MB, less than 31.68%
/**
* 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) {
if (!root) return '[]'
let queue = [root]
let res = []
while(queue.length > 0) {
const node = queue.shift()
if(node) {
res.push(node.val)
queue.push(node.left)
queue.push(node.right)
} else {
res.push(null)
}
}
return JSON.stringify(res)
};
/**
* Decodes your encoded data to tree.
*
* @param {string} data
* @return {TreeNode}
*/
var deserialize = function(data) {
let res = JSON.parse(data)
if(res.length === 0) return null
let root = new TreeNode(res.shift())
let queue = [root]
for (let i = 0; i < res.length; i++) {
const node = queue.shift()
if (res[i] !== null) {
let left = new TreeNode(res[i])
node.left = left
queue.push(left)
}
if (res[++i] !== null) {
let right = new TreeNode(res[i])
node.right = right
queue.push(right)
}
}
return root
};
/**
* Your functions will be called as such:
* deserialize(serialize(root));
*/