核心概念: 前序遍歷 + Null 標記
class TreeNode(var `val`: Int) {
var left: TreeNode? = null
var right: TreeNode? = null
}
class Codec {
// Encodes a tree to a single string.
fun serialize(root: TreeNode?): String {
val sb = StringBuilder()
fun dfs(node: TreeNode?) {
if (node == null) {
sb.append("null,")
return
}
sb.append("${node.`val`},")
dfs(node.left)
dfs(node.right)
}
dfs(root)
return sb.toString()
}
// Decodes your encoded data to tree.
fun deserialize(data: String): TreeNode? {
val nodes = ArrayDeque(data.split(","))
fun dfs(): TreeNode? {
val value = nodes.removeFirst()
if (value == "null" || value.isEmpty()) return null
val node = TreeNode(value.toInt())
node.left = dfs()
node.right = dfs()
return node
}
return dfs()
}
}