Skip to content

Commit f444988

Browse files
committed
solve
1 parent e211a9c commit f444988

File tree

1 file changed

+87
-0
lines changed

1 file changed

+87
-0
lines changed
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* public class TreeNode {
4+
* public var val: Int
5+
* public var left: TreeNode?
6+
* public var right: TreeNode?
7+
* public init(_ val: Int) {
8+
* self.val = val
9+
* self.left = nil
10+
* self.right = nil
11+
* }
12+
* }
13+
*/
14+
15+
class Codec {
16+
// O(n) time / O(n) space
17+
func serialize(_ root: TreeNode?) -> String {
18+
var serializedNodes = [String]()
19+
var queueNodes = [TreeNode?]()
20+
queueNodes.append(root)
21+
var head = 0
22+
23+
while head < queueNodes.count {
24+
let node = queueNodes[head]
25+
head += 1
26+
27+
if let node {
28+
serializedNodes.append("\(node.val)")
29+
30+
queueNodes.append(node.left)
31+
queueNodes.append(node.right)
32+
} else {
33+
serializedNodes.append("null")
34+
}
35+
36+
}
37+
38+
return serializedNodes.joined(separator: ",")
39+
}
40+
41+
// O(n) time / O(n) space
42+
func deserialize(_ data: String) -> TreeNode? {
43+
let serializedTree = data
44+
var nodeVals = serializedTree.split(separator: ",")
45+
46+
guard let first = nodeVals.first,
47+
let firstVal = Int(first) else {
48+
return nil
49+
}
50+
51+
let root = TreeNode(firstVal)
52+
var queueNodes = [TreeNode]()
53+
queueNodes.append(root)
54+
var head = 0
55+
var isLeft = true
56+
57+
for i in 1..<nodeVals.count {
58+
let node = queueNodes[head]
59+
let stringValue = nodeVals[i]
60+
let val = Int(stringValue)
61+
62+
if isLeft {
63+
if let val {
64+
let leftNode = TreeNode(val)
65+
node.left = leftNode
66+
queueNodes.append(leftNode)
67+
} else {
68+
node.left = nil
69+
}
70+
} else {
71+
if let val {
72+
let rightNode = TreeNode(val)
73+
node.right = rightNode
74+
queueNodes.append(rightNode)
75+
} else {
76+
node.right = nil
77+
}
78+
head += 1
79+
}
80+
isLeft.toggle()
81+
}
82+
83+
return root
84+
}
85+
}
86+
87+

0 commit comments

Comments
 (0)