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)