File tree 2 files changed +129
-0
lines changed
2 files changed +129
-0
lines changed Original file line number Diff line number Diff line change @@ -462,6 +462,75 @@ public class Codec {
462
462
// codec.deserialize(codec.serialize(root));
463
463
```
464
464
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
+
465
534
<!-- tabs:end -->
466
535
467
536
<!-- solution:end -->
Original file line number Diff line number Diff line change
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
+ }
You can’t perform that action at this time.
0 commit comments