Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -314,6 +314,78 @@ const rdeserialize = dataList => {
*/
```

#### Swift

```swift
/* class TreeNode {
* var val: Int
* var left: TreeNode?
* var right: TreeNode?
* init() {
* self.val = 0
* self.left = nil
* self.right = nil
* }
* init(_ val: Int) {
* self.val = val
* self.left = nil
* self.right = nil
* }
* init(_ val: Int, _ left: TreeNode?, _ right: TreeNode?) {
* self.val = val
* self.left = left
* self.right = right
* }
* }
*/

class Codec {
private let NULL = "#"
private let SEP = ","

func serialize(_ root: TreeNode?) -> String {
guard let root = root else { return "" }
var sb = ""
preorder(root, &sb)
return sb
}

private func preorder(_ root: TreeNode?, _ sb: inout String) {
guard let root = root else {
sb += NULL + SEP
return
}
sb += "\(root.val)" + SEP
preorder(root.left, &sb)
preorder(root.right, &sb)
}

func deserialize(_ data: String) -> TreeNode? {
guard !data.isEmpty else { return nil }
var vals = data.split(separator: Character(SEP)).map { String($0) }
return deserialize(&vals)
}

private func deserialize(_ vals: inout [String]) -> TreeNode? {
if vals.isEmpty { return nil }
let first = vals.removeFirst()
if first == NULL {
return nil
}
let root = TreeNode(Int(first)!)
root.left = deserialize(&vals)
root.right = deserialize(&vals)
return root
}
}
/**
* Your functions will be called as such:
* let codec = Codec()
* let serializedDatacodec.serialize(root);
* codec.deserialize(serializedData);
*/
```

<!-- tabs:end -->

<!-- solution:end -->
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
/* class TreeNode {
* var val: Int
* var left: TreeNode?
* var right: TreeNode?
* init() {
* self.val = 0
* self.left = nil
* self.right = nil
* }
* init(_ val: Int) {
* self.val = val
* self.left = nil
* self.right = nil
* }
* init(_ val: Int, _ left: TreeNode?, _ right: TreeNode?) {
* self.val = val
* self.left = left
* self.right = right
* }
* }
*/

class Codec {
private let NULL = "#"
private let SEP = ","

func serialize(_ root: TreeNode?) -> String {
guard let root = root else { return "" }
var sb = ""
preorder(root, &sb)
return sb
}

private func preorder(_ root: TreeNode?, _ sb: inout String) {
guard let root = root else {
sb += NULL + SEP
return
}
sb += "\(root.val)" + SEP
preorder(root.left, &sb)
preorder(root.right, &sb)
}

func deserialize(_ data: String) -> TreeNode? {
guard !data.isEmpty else { return nil }
var vals = data.split(separator: Character(SEP)).map { String($0) }
return deserialize(&vals)
}

private func deserialize(_ vals: inout [String]) -> TreeNode? {
if vals.isEmpty { return nil }
let first = vals.removeFirst()
if first == NULL {
return nil
}
let root = TreeNode(Int(first)!)
root.left = deserialize(&vals)
root.right = deserialize(&vals)
return root
}
}
/**
* Your functions will be called as such:
* let codec = Codec()
* let serializedDatacodec.serialize(root);
* codec.deserialize(serializedData);
*/