题解 | #序列化二叉树#
序列化二叉树
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 } }