Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit b574ba5

Browse files
feat: add swift implementation to lcof2 problem: No.048 (doocs#3063)
1 parent c588c2c commit b574ba5

File tree

2 files changed

+139
-0
lines changed

2 files changed

+139
-0
lines changed

‎lcof2/剑指 Offer II 048. 序列化与反序列化二叉树/README.md‎

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,78 @@ const rdeserialize = dataList => {
314314
*/
315315
```
316316

317+
#### Swift
318+
319+
```swift
320+
/* class TreeNode {
321+
* var val: Int
322+
* var left: TreeNode?
323+
* var right: TreeNode?
324+
* init() {
325+
* self.val = 0
326+
* self.left = nil
327+
* self.right = nil
328+
* }
329+
* init(_ val: Int) {
330+
* self.val = val
331+
* self.left = nil
332+
* self.right = nil
333+
* }
334+
* init(_ val: Int, _ left: TreeNode?, _ right: TreeNode?) {
335+
* self.val = val
336+
* self.left = left
337+
* self.right = right
338+
* }
339+
* }
340+
*/
341+
342+
class Codec {
343+
private let NULL = "#"
344+
private let SEP = ","
345+
346+
func serialize(_ root: TreeNode?) -> String {
347+
guard let root = root else { return "" }
348+
var sb = ""
349+
preorder(root, &sb)
350+
return sb
351+
}
352+
353+
private func preorder(_ root: TreeNode?, _ sb: inout String) {
354+
guard let root = root else {
355+
sb += NULL + SEP
356+
return
357+
}
358+
sb += "\(root.val)" + SEP
359+
preorder(root.left, &sb)
360+
preorder(root.right, &sb)
361+
}
362+
363+
func deserialize(_ data: String) -> TreeNode? {
364+
guard !data.isEmpty else { return nil }
365+
var vals = data.split(separator: Character(SEP)).map { String(0ドル) }
366+
return deserialize(&vals)
367+
}
368+
369+
private func deserialize(_ vals: inout [String]) -> TreeNode? {
370+
if vals.isEmpty { return nil }
371+
let first = vals.removeFirst()
372+
if first == NULL {
373+
return nil
374+
}
375+
let root = TreeNode(Int(first)!)
376+
root.left = deserialize(&vals)
377+
root.right = deserialize(&vals)
378+
return root
379+
}
380+
}
381+
/**
382+
* Your functions will be called as such:
383+
* let codec = Codec()
384+
* let serializedDatacodec.serialize(root);
385+
* codec.deserialize(serializedData);
386+
*/
387+
```
388+
317389
<!-- tabs:end -->
318390

319391
<!-- solution:end -->
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
/* class TreeNode {
2+
* var val: Int
3+
* var left: TreeNode?
4+
* var right: TreeNode?
5+
* init() {
6+
* self.val = 0
7+
* self.left = nil
8+
* self.right = nil
9+
* }
10+
* init(_ val: Int) {
11+
* self.val = val
12+
* self.left = nil
13+
* self.right = nil
14+
* }
15+
* init(_ val: Int, _ left: TreeNode?, _ right: TreeNode?) {
16+
* self.val = val
17+
* self.left = left
18+
* self.right = right
19+
* }
20+
* }
21+
*/
22+
23+
class Codec {
24+
private let NULL = "#"
25+
private let SEP = ","
26+
27+
func serialize(_ root: TreeNode?) -> String {
28+
guard let root = root else { return "" }
29+
var sb = ""
30+
preorder(root, &sb)
31+
return sb
32+
}
33+
34+
private func preorder(_ root: TreeNode?, _ sb: inout String) {
35+
guard let root = root else {
36+
sb += NULL + SEP
37+
return
38+
}
39+
sb += "\(root.val)" + SEP
40+
preorder(root.left, &sb)
41+
preorder(root.right, &sb)
42+
}
43+
44+
func deserialize(_ data: String) -> TreeNode? {
45+
guard !data.isEmpty else { return nil }
46+
var vals = data.split(separator: Character(SEP)).map { String(0ドル) }
47+
return deserialize(&vals)
48+
}
49+
50+
private func deserialize(_ vals: inout [String]) -> TreeNode? {
51+
if vals.isEmpty { return nil }
52+
let first = vals.removeFirst()
53+
if first == NULL {
54+
return nil
55+
}
56+
let root = TreeNode(Int(first)!)
57+
root.left = deserialize(&vals)
58+
root.right = deserialize(&vals)
59+
return root
60+
}
61+
}
62+
/**
63+
* Your functions will be called as such:
64+
* let codec = Codec()
65+
* let serializedDatacodec.serialize(root);
66+
* codec.deserialize(serializedData);
67+
*/

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /