297.二叉树的序列化与反序列化
297.二叉树的序列化与反序列化
题解
题目:给你一个二叉树,序列化从一个string字符串,再从一个string字符串还原出二叉树
思路:
1.序列化:前序遍历,根左右 2.反序列化:递归,根左右
代码
type TreeNode struct { Val int Left *TreeNode Right *TreeNode } type Codec struct{} func Constructor() (_ Codec) { return } func (Codec) serialize(root *TreeNode) string { ss := make([]string, 0) var dfs func(*TreeNode) dfs = func(root *TreeNode) { if root == nil { ss = append(ss, "null") return } ss = append(ss, strconv.Itoa(root.Val)) dfs(root.Left) dfs(root.Right) } dfs(root) return strings.Join(ss, ",") } func (Codec) deserialize(data string) *TreeNode { ss := strings.Split(data, ",") var build func() *TreeNode build = func() *TreeNode { if ss[0] == "null" { ss = ss[1:] return nil } val, _ := strconv.Atoi(ss[0]) ss = ss[1:] return &TreeNode{val, build(), build()} } return build() }