序列化和反序列化二叉树

序列化采用前序遍历二叉树,返回一个带有指针信息的字符串。

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
50
51
52
53
54
55
56
57
58
59
60
/**
 * 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题。

posted @   ☞@_@  阅读(26)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
历史上的今天:
2021-04-01 win32 API编程之常用消息详解
点击右上角即可分享
微信分享提示