function TreeNode(val) {
this.val = val;
this.left = this.right = null;
}
var serialize = function (root) {
const res = levelOrder(root)
return res.join(',')
};
var deserialize = function (data) {
if(data === '') {
return null
}
const dataArr = data.split(',')
const root = levelOrderToTree(dataArr)
return root
};
function preorder(root, res) {
res = res || []
if (!root) {
res.push('NULL')
return res
}
res.push(root.val)
preorder(root.left, res)
preorder(root.right, res)
return res
}
function preorderToTree(arr) {
let val = arr.shift()
if (val === 'NULL') {
return null
}
let root = new TreeNode(val)
root.left = preorderToTree(arr)
root.right = preorderToTree(arr)
return root
}
function inorder(root, res) {
res = res || []
if (!root) {
res.push('NULL')
return res
}
preorder(root.left, res)
res.push(root.val)
preorder(root.right, res)
return res
}
function levelOrder(root) {
if (!root) {
return []
}
let queue = []
queue.push(root)
let res = []
while (queue.length) {
let len = queue.length
for (let i = 0; i < len; i++) {
let node = queue.shift()
res.push(node ? node.val : 'NULL')
if (node) {
queue.push(node.left)
queue.push(node.right)
}
}
}
return res
}
function levelOrderToTree(arr) {
let queue = []
let rootVal = arr.shift()
let root = new TreeNode(rootVal)
queue.push(root)
while (queue.length) {
let node = queue.shift()
let left = arr.shift()
let right = arr.shift()
if (left === 'NULL') {
node.left = null
} else {
let leftNode = new TreeNode(left)
node.left = leftNode
queue.push(leftNode)
}
if (right === 'NULL') {
node.right = null
} else {
let rightNode = new TreeNode(right)
node.right = rightNode
queue.push(rightNode)
}
}
return root
}