diff --git "a/lcof/\351\235\242\350\257\225\351\242\23037. \345\272\217\345\210\227\345\214\226\344\272\214\345\217\211\346\240\221/README.md" "b/lcof/\351\235\242\350\257\225\351\242\23037. \345\272\217\345\210\227\345\214\226\344\272\214\345\217\211\346\240\221/README.md" index bc3483b5d5aae..9387205dd484d 100644 --- "a/lcof/\351\235\242\350\257\225\351\242\23037. \345\272\217\345\210\227\345\214\226\344\272\214\345\217\211\346\240\221/README.md" +++ "b/lcof/\351\235\242\350\257\225\351\242\23037. \345\272\217\345\210\227\345\214\226\344\272\214\345\217\211\346\240\221/README.md" @@ -462,6 +462,75 @@ public class Codec { // codec.deserialize(codec.serialize(root)); ``` +#### Swift + +```swift + +/* public class TreeNode { +* var val: Int +* var left: TreeNode? +* var right: TreeNode? +* init(_ val: Int) { +* self.val = val +* self.left = nil +* self.right = nil +* } +* } +*/ + +public class Codec { + func serialize(_ root: TreeNode?) -> String { + guard let root = root else { + return "null" + } + var result = [String]() + var queue = [TreeNode?]() + queue.append(root) + while !queue.isEmpty { + let node = queue.removeFirst() + if let node = node { + result.append("\(node.val)") + queue.append(node.left) + queue.append(node.right) + } else { + result.append("#") + } + } + return result.joined(separator: ",") + } + + func deserialize(_ data: String) -> TreeNode? { + if data == "null" { + return nil + } + let vals = data.split(separator: ",").map { String($0) } + var i = 0 + let root = TreeNode(Int(vals[i])!) + var queue = [TreeNode]() + queue.append(root) + i += 1 + while !queue.isEmpty { + let node = queue.removeFirst() + if vals[i] != "#" { + node.left = TreeNode(Int(vals[i])!) + queue.append(node.left!) + } + i += 1 + if vals[i] != "#" { + node.right = TreeNode(Int(vals[i])!) + queue.append(node.right!) + } + i += 1 + } + return root + } +} +// Your Codec object will be instantiated and called as such: +// let codec = Codec() +// let serializedData = codec.serialize(root) +// let deserializedTree = codec.deserialize(serializedData) +``` + diff --git "a/lcof/\351\235\242\350\257\225\351\242\23037. \345\272\217\345\210\227\345\214\226\344\272\214\345\217\211\346\240\221/Solution.swift" "b/lcof/\351\235\242\350\257\225\351\242\23037. \345\272\217\345\210\227\345\214\226\344\272\214\345\217\211\346\240\221/Solution.swift" new file mode 100644 index 0000000000000..3c44bb319491e --- /dev/null +++ "b/lcof/\351\235\242\350\257\225\351\242\23037. \345\272\217\345\210\227\345\214\226\344\272\214\345\217\211\346\240\221/Solution.swift" @@ -0,0 +1,60 @@ + +/* public class TreeNode { +* var val: Int +* var left: TreeNode? +* var right: TreeNode? +* init(_ val: Int) { +* self.val = val +* self.left = nil +* self.right = nil +* } +* } +*/ + +public class Codec { + func serialize(_ root: TreeNode?) -> String { + guard let root = root else { + return "null" + } + var result = [String]() + var queue = [TreeNode?]() + queue.append(root) + while !queue.isEmpty { + let node = queue.removeFirst() + if let node = node { + result.append("\(node.val)") + queue.append(node.left) + queue.append(node.right) + } else { + result.append("#") + } + } + return result.joined(separator: ",") + } + + func deserialize(_ data: String) -> TreeNode? { + if data == "null" { + return nil + } + let vals = data.split(separator: ",").map { String($0) } + var i = 0 + let root = TreeNode(Int(vals[i])!) + var queue = [TreeNode]() + queue.append(root) + i += 1 + while !queue.isEmpty { + let node = queue.removeFirst() + if vals[i] != "#" { + node.left = TreeNode(Int(vals[i])!) + queue.append(node.left!) + } + i += 1 + if vals[i] != "#" { + node.right = TreeNode(Int(vals[i])!) + queue.append(node.right!) + } + i += 1 + } + return root + } +} \ No newline at end of file