package main import . "nc_tools" import ( "strconv" "strings" ) /* * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */ /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * @param root TreeNode类 * @return TreeNode类 */ // 序列化:前序遍历 func Serialize( root *TreeNode ) string { res := strings.Builder{} var preOrder func(node *TreeNode) preOrder = func(node *TreeNode) { if node == nil { res.WriteString("nil,") return } res.WriteString(strconv.Itoa(node.Val) + ",") preOrder(node.Left) preOrder(node.Right) } preOrder(root) return res.String() } // 反序列化:前序遍历解码 func Deserialize( s string ) *TreeNode { str := strings.Split(s, ",") if len(str) == 0{ return &TreeNode{} } var preOrder func() *TreeNode preOrder = func() *TreeNode { if str[0] == "nil" { str = str[1:] return nil } val, _ := strconv.Atoi(str[0]) str = str[1:] root := &TreeNode{Val: val} root.Left = preOrder() root.Right = preOrder() return root } return preOrder() }