package main
import (
"strconv"
"fmt"
"strings"
)
/*
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* @param root TreeNode类
* @return TreeNode类
*/
func Serialize(root *TreeNode) string {
node := root
res := strings.Builder{}
var pre func(node *TreeNode)
pre = func(node *TreeNode) {
if node == nil {
res.WriteString("#,")
return
}
res.WriteString(fmt.Sprintf("%v,", node.Val))
pre(node.Left)
pre(node.Right)
}
pre(node)
return res.String()
}
func Deserialize(s string) *TreeNode {
str := s
if len(str) == 0 {
return nil
}
arr := strings.Split(str, ",")
var build func() *TreeNode
build = func() *TreeNode {
if arr[0] == "#" {
arr = arr[1:]
return nil
}
ele, _ := strconv.Atoi(arr[0])
arr = arr[1:]
node := &TreeNode{Val: ele}
node.Left = build()
node.Right = build()
return node
}
return build()
}