题解 | #序列化二叉树#
序列化二叉树
https://www.nowcoder.com/practice/cf7e25aa97c04cc1a68c8f040e71fb84
/**
// * public class TreeNode {
// * public var val: Int
// * public var left: TreeNode?
// * public var right: TreeNode?
// * public init(_ val: Int=0, _ left: TreeNode?=nil, _ right: TreeNode?=nil) {
// * self.val = val
// * self.left = left
// * self.right = right
// * }
*/
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* @param root TreeNode类
* @return TreeNode类
*/
// 规定使用,分割节点,空字符串null表示
// 规定使用,分割节点,空字符串null表示
func Serialize ( _ root: TreeNode?) -> String {
// 层序遍历
if root == nil {
return ""
}
var arr = [Int?]()
var queue = [TreeNode?]()
arr.append(root!.val)
queue.append(root)
while !queue.isEmpty {
var size = queue.count
while size > 0 {
let node:TreeNode? = queue.removeFirst() ?? nil
if (node != nil) {
queue.append(node?.left)
queue.append(node?.right)
arr.append(node?.left?.val)
arr.append(node?.right?.val)
}
size = size - 1
}
}
for index in (0 ... arr.count - 1).reversed() {
if arr[index] == nil {
arr.remove(at: index)
} else {
break
}
}
let strArr:[String] = arr.map {
if $0 == nil {
return "#"
} else {
return String($0 ?? 0)
}
}
let res = strArr.joined(separator: ",")
return res
}
func Deserialize ( _ str: String) -> TreeNode? {
if str.count == 0 { return nil }
var arr:[Int?] = str.components(separatedBy: ",").map {
if $0 == "#" {
return nil
} else {
return Int($0)
}
}
if arr.count == 0 || arr.first == nil {
return nil
}
var queue = [TreeNode?]()
let firstNode = TreeNode(arr.removeFirst()!)
queue.append(firstNode)
while !queue.isEmpty && !arr.isEmpty {
var size = queue.count
while size > 0 {
let node = queue.removeFirst()
size = size - 1
if node != nil {
if arr.count <= 0 {
break
}
let left = arr.removeFirst()
if left != nil {
node?.left = TreeNode(left!)
queue.append(node?.left)
}
if arr.count <= 0 {
break
}
let right = arr.removeFirst()
if right != nil {
node?.right = TreeNode(right!)
queue.append(node?.right)
}
}
}
}
return firstNode
}
}

