Skip to content

Commit 8ed6670

Browse files
committed
Swift: 297.Serialize and Deserialize BT
1 parent ee29457 commit 8ed6670

File tree

1 file changed

+48
-0
lines changed

1 file changed

+48
-0
lines changed
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
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+
17+
func preorderTraversal(_ root: TreeNode?) -> String {
18+
guard let root = root else { return "x" }
19+
return "\(root.val)" + " " + preorderTraversal(root.left) + " " + preorderTraversal(root.right)
20+
}
21+
22+
func serialize(_ root: TreeNode?) -> String {
23+
return preorderTraversal(root)
24+
}
25+
26+
func preorderTraversal(_ data: [String], _ index: inout Int) -> TreeNode? {
27+
guard index < data.count else { return nil }
28+
guard data[index] != "x" else { return nil }
29+
guard let val = Int(data[index]) else { return nil }
30+
let current = TreeNode(val)
31+
index += 1
32+
current.left = preorderTraversal(data, &index)
33+
index += 1
34+
current.right = preorderTraversal(data, &index)
35+
return current
36+
}
37+
38+
func deserialize(_ data: String) -> TreeNode? {
39+
guard !data.isEmpty else { return nil }
40+
var index = 0
41+
return preorderTraversal(data.split(separator: " ").map { String($0) }, &index)
42+
}
43+
}
44+
45+
// Your Codec object will be instantiated and called as such:
46+
// var ser = Codec()
47+
// var deser = Codec()
48+
// deser.deserialize(ser.serialize(root))

0 commit comments

Comments
 (0)