题目
- 请实现两个函数,分别用来序列化和反序列化二叉树
- leetcode链接:https://leetcode-cn.com/problems/xu-lie-hua-er-cha-shu-lcof/
/**
* 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 '[]'
const queue = [root]
const result = []
while (queue.length) {
const node = queue.shift()
if (node) {
result.push(node.val)
queue.push(node.left)
queue.push(node.right)
} else {
result.push(null)
}
}
return JSON.stringify(result)
}
/**
* Decodes your encoded data to tree.
*
* @param {string} data
* @return {TreeNode}
*/
var deserialize = function (data) {
if (data === '[]') return null
const arr = JSON.parse(data)
const root = new TreeNode(arr[0])
const queue = [root]
let i = 1
while (queue.length) {
const node = queue.shift()
// 为0时也是可创建节点的,所以要判断是否为null
if (arr[i] !== null) {
node.left = new TreeNode(arr[i])
queue.push(node.left)
}
i++
if (arr[i] !== null) {
node.right = new TreeNode(arr[i])
queue.push(node.right)
}
i++
}
return root
}