二叉树的序列化与反序列化 https://leetcode-cn.com/problems/serialize-and-deserialize-binary-tree/
前序遍历 按任意一种方式遍历然后用相同的方式还原其实都可以,这里选择前序遍历。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 import "strconv" type Codec struct { }func Constructor () (_ Codec) { return }func (this *Codec) serialize (root *TreeNode) string { sb := &strings.Builder{} serialize(root, sb) return sb.String() }func serialize (root *TreeNode, sb *strings.Builder) { if root == nil { sb.WriteString("null," ) return } sb.WriteString(strconv.Itoa(root.Val)) sb.WriteByte(',' ) serialize(root.Left, sb) serialize(root.Right, sb) }func (this *Codec) deserialize (data string ) *TreeNode { stringSlice := strings.Split(data, "," ) var deserialize func () *TreeNode deserialize = func () *TreeNode { if stringSlice[0 ] == "null" { stringSlice = stringSlice[1 :] return nil } val, _ := strconv.Atoi(stringSlice[0 ]) stringSlice = stringSlice[1 :] return &TreeNode{val, deserialize(), deserialize()} } return deserialize() }