LeetCode 297 二叉树的序列化与反序列化(关于字符串的一些操作,要重新做,第一次做得不太顺)

 1、看到题目首先想到的是什么是序列化,什么是反序列化,题目说得好抽象😥,后来才发现为了方便存储,序列化就是要将原本的数据结构存储为字符串,反序列化即将该字符串重新变回之前的数据结构。题目所给的数据结构为二叉树,所以这道题目的目标在于将二叉树存储为字符串,再将字符串转为二叉树。

/*
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */

type Codec struct {}

func Constructor() (_ Codec) { return }

// Serializes a tree to a single string.
func (this *Codec) serialize(root *TreeNode) string {
    var data strings.Builder
    var dfs func(r *TreeNode)
    dfs=func(r *TreeNode) {
        if r==nil{
            data.WriteString("null,")
            return
        }
        val:=strconv.Itoa(r.Val)+","
        data.WriteString(val)
        dfs(r.Left)
        dfs(r.Right)
    }
    dfs(root)
    return data.String()
}

// Deserializes your encoded data to tree.
func (this *Codec) deserialize(data string) *TreeNode {
    d := strings.Split(data, ",")
    // fmt.Println(d)
    var des func() *TreeNode
    des=func() *TreeNode {
        if d[0]=="null"{
            d=d[1:]
            return nil
        }
        val, _:=strconv.Atoi(d[0])
        d=d[1:]
        return &TreeNode{val, des(), des()}
    }
    return des()
}

/*
 * Your Codec object will be instantiated and called as such:
 * ser := Constructor();
 * deser := Constructor();
 * data := ser.serialize(root);
 * ans := deser.deserialize(data);
 */

注:注意一些字符串与int之间的相互转化

/* int 类型转换成字符串 */
func Itoa(i int) string
// 使用示例
str := strconv.Itoa(a)

/* 字符串转换成 int 类型 */
func Atoi(s string) (int, error)
// 使用示例
i,err := strconv.Atoi(a)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值