序列化和反序列化二叉树
序列化采用前序遍历二叉树,返回一个带有指针信息的字符串。
/**
* 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题。

浙公网安备 33010602011771号