-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserializeAndDeserialize.ts
59 lines (47 loc) · 1.25 KB
/
serializeAndDeserialize.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import { TreeNode } from 'classes/BinaryTreeNode'
// <Recursion, DFS>
// Time: O(n)
// Space: O(n)
/*
* Encodes a tree to a single string.
*/
function dfsSerialize(node: TreeNode | null, str = ''): string {
if (!node) {
str += '#,' // # for null
} else {
str += `${node.val},`
str = dfsSerialize(node.left, str)
str = dfsSerialize(node.right, str)
}
return str
}
function serialize(root: TreeNode | null): string {
return dfsSerialize(root)
}
/*
* Decodes your encoded data to tree.
*/
function dfsDeserialize(dataList: string[]): TreeNode | null {
// edge cases
if (dataList[0] === '#') {
dataList.shift()
return null
}
const node = new TreeNode(parseInt(dataList[0], 10))
dataList.shift()
node.left = dfsDeserialize(dataList)
node.right = dfsDeserialize(dataList)
return node
}
function deserialize(data: string): TreeNode | null {
const nodes = data.split(',')
return dfsDeserialize(nodes)
}
/**
* Your functions will be called as such:
* deserialize(serialize(root));
*/
function serializeAndDeserialize(root: TreeNode | null): TreeNode | null {
return deserialize(serialize(root))
}
export { deserialize, serialize, serializeAndDeserialize }