Skip to content

Commit 0af6fc9

Browse files
authored
feat: add swift implementation to lcof problem: No.37 (#2907)
1 parent e6d7959 commit 0af6fc9

File tree

2 files changed

+129
-0
lines changed

2 files changed

+129
-0
lines changed

lcof/面试题37. 序列化二叉树/README.md

+69
Original file line numberDiff line numberDiff line change
@@ -462,6 +462,75 @@ public class Codec {
462462
// codec.deserialize(codec.serialize(root));
463463
```
464464

465+
#### Swift
466+
467+
```swift
468+
469+
/* public class TreeNode {
470+
* var val: Int
471+
* var left: TreeNode?
472+
* var right: TreeNode?
473+
* init(_ val: Int) {
474+
* self.val = val
475+
* self.left = nil
476+
* self.right = nil
477+
* }
478+
* }
479+
*/
480+
481+
public class Codec {
482+
func serialize(_ root: TreeNode?) -> String {
483+
guard let root = root else {
484+
return "null"
485+
}
486+
var result = [String]()
487+
var queue = [TreeNode?]()
488+
queue.append(root)
489+
while !queue.isEmpty {
490+
let node = queue.removeFirst()
491+
if let node = node {
492+
result.append("\(node.val)")
493+
queue.append(node.left)
494+
queue.append(node.right)
495+
} else {
496+
result.append("#")
497+
}
498+
}
499+
return result.joined(separator: ",")
500+
}
501+
502+
func deserialize(_ data: String) -> TreeNode? {
503+
if data == "null" {
504+
return nil
505+
}
506+
let vals = data.split(separator: ",").map { String($0) }
507+
var i = 0
508+
let root = TreeNode(Int(vals[i])!)
509+
var queue = [TreeNode]()
510+
queue.append(root)
511+
i += 1
512+
while !queue.isEmpty {
513+
let node = queue.removeFirst()
514+
if vals[i] != "#" {
515+
node.left = TreeNode(Int(vals[i])!)
516+
queue.append(node.left!)
517+
}
518+
i += 1
519+
if vals[i] != "#" {
520+
node.right = TreeNode(Int(vals[i])!)
521+
queue.append(node.right!)
522+
}
523+
i += 1
524+
}
525+
return root
526+
}
527+
}
528+
// Your Codec object will be instantiated and called as such:
529+
// let codec = Codec()
530+
// let serializedData = codec.serialize(root)
531+
// let deserializedTree = codec.deserialize(serializedData)
532+
```
533+
465534
<!-- tabs:end -->
466535

467536
<!-- solution:end -->
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
2+
/* public class TreeNode {
3+
* var val: Int
4+
* var left: TreeNode?
5+
* var right: TreeNode?
6+
* init(_ val: Int) {
7+
* self.val = val
8+
* self.left = nil
9+
* self.right = nil
10+
* }
11+
* }
12+
*/
13+
14+
public class Codec {
15+
func serialize(_ root: TreeNode?) -> String {
16+
guard let root = root else {
17+
return "null"
18+
}
19+
var result = [String]()
20+
var queue = [TreeNode?]()
21+
queue.append(root)
22+
while !queue.isEmpty {
23+
let node = queue.removeFirst()
24+
if let node = node {
25+
result.append("\(node.val)")
26+
queue.append(node.left)
27+
queue.append(node.right)
28+
} else {
29+
result.append("#")
30+
}
31+
}
32+
return result.joined(separator: ",")
33+
}
34+
35+
func deserialize(_ data: String) -> TreeNode? {
36+
if data == "null" {
37+
return nil
38+
}
39+
let vals = data.split(separator: ",").map { String($0) }
40+
var i = 0
41+
let root = TreeNode(Int(vals[i])!)
42+
var queue = [TreeNode]()
43+
queue.append(root)
44+
i += 1
45+
while !queue.isEmpty {
46+
let node = queue.removeFirst()
47+
if vals[i] != "#" {
48+
node.left = TreeNode(Int(vals[i])!)
49+
queue.append(node.left!)
50+
}
51+
i += 1
52+
if vals[i] != "#" {
53+
node.right = TreeNode(Int(vals[i])!)
54+
queue.append(node.right!)
55+
}
56+
i += 1
57+
}
58+
return root
59+
}
60+
}

0 commit comments

Comments
 (0)