题解 | #序列化二叉树#

序列化二叉树

https://www.nowcoder.com/practice/cf7e25aa97c04cc1a68c8f040e71fb84

kotlin
前序遍历
/**
 * class TreeNode(var `val`: Int) {
 *     var left: TreeNode? = null
 *     var right: TreeNode? = null
 * }
 */


object Solution {
    /**
    * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
    * 
        * @param root TreeNode类 
        * @return TreeNode类
    */
    var index = 0
    val stringBuilder = StringBuilder()
    fun Serialize(root: TreeNode?): String  {
        if(root == null) return ""
        dfs(root)
        //删除最后多余的逗号
        stringBuilder.deleteCharAt(stringBuilder.length - 1)
        return stringBuilder.toString()
    }
    
    private fun dfs(root: TreeNode?) {
        //子树为空是递归返回点
        if(root == null) {
            stringBuilder.append("#,")
            return
        }
        //加逗号分割符
        stringBuilder.append(root.`val`).append(",")
        dfs(root.left)      
        dfs(root.right)
    } 
    
    fun Deserialize(str: String): TreeNode?  {
        if(str == "") return null
        val array = str.split(",")
        return buildTree(array)
    }
    
    private fun buildTree(array: List<String>): TreeNode? {
        if(index >= array.size || array[index] == "#") {
            index++
            return null
        }
        val root = TreeNode(array[index++].toInt())
        val left = buildTree(array)      
        val right = buildTree(array)
        root.left = left
        root.right = right
        return root
    }

}


全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务