题解 | #序列化二叉树#

序列化二叉树

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

package main
import . "nc_tools"
import (
    "strconv"
    "strings"
)
/*
 * type TreeNode struct {
 *   Val int
 *   Left *TreeNode
 *   Right *TreeNode
 * }
 */

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 * 
 * @param root TreeNode类 
 * @return TreeNode类
*/
// 序列化:前序遍历
func Serialize( root *TreeNode ) string {
    res := strings.Builder{}
    var preOrder func(node *TreeNode)
    preOrder = func(node *TreeNode) {
        if node == nil {
            res.WriteString("nil,")
            return
        }
        res.WriteString(strconv.Itoa(node.Val) + ",")
        preOrder(node.Left)
        preOrder(node.Right)
    }
    preOrder(root)
    return res.String()
}

// 反序列化:前序遍历解码
func Deserialize( s string ) *TreeNode {
    str := strings.Split(s, ",")
	if len(str) == 0{
        return &TreeNode{}
    }
    var preOrder func() *TreeNode
    preOrder = func() *TreeNode {
        if str[0] == "nil" {
            str = str[1:]
            return nil
        }
        val, _ :=  strconv.Atoi(str[0])
        str = str[1:]
        root := &TreeNode{Val: val}
        root.Left = preOrder()
        root.Right = preOrder()
        return root
    }
    return preOrder()
}


全部评论

相关推荐

12-20 11:26
复旦大学 Java
点赞 评论 收藏
分享
抓蛙得要春天:在我眼里看起来干净整洁,排版基本没什么问题,在HR看来,哦对了,HR不会看
点赞 评论 收藏
分享
11-03 13:18
门头沟学院 Java
包行:平时怎么刷算法题的哇,字节的手撕听说都很难
字节跳动工作体验
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务