序列化和反序列化二叉树
序列化采用前序遍历二叉树,返回一个带有指针信息的字符串。
/** * 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 { sb := &strings.Builder{} var dfs func(*TreeNode) dfs = func(node *TreeNode) { if node == nil { sb.WriteString("null,") return } sb.WriteString(strconv.Itoa(node.Val)) sb.WriteByte(',') dfs(node.Left) dfs(node.Right) } dfs(root) return sb.String() } // Deserializes your encoded data to tree. func (this *Codec) deserialize(data string) *TreeNode { sp:=strings.Split(data,",") var build func()*TreeNode build=func()*TreeNode{ if sp[0]=="null"{ sp=sp[1:] return nil } val,_:=strconv.Atoi(sp[0]) sp=sp[1:] return &TreeNode{val,build(),build()} } return build() } /** * Your Codec object will be instantiated and called as such: * ser := Constructor(); * deser := Constructor(); * data := ser.serialize(root); * ans := deser.deserialize(data); */
力扣第297题。