• 老卫带你学---leetcode刷题(297. 二叉树的序列化与反序列化)


    297. 二叉树的序列化与反序列化

    问题:

    序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。

    请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。

    输入:root = [1,2,3,null,null,4,5]
    输出:[1,2,3,null,null,4,5]
    示例 2
    • 1
    • 2
    • 3
    输入:root = []
    输出:[]
    示例 3
    • 1
    • 2
    • 3
    输入:root = [1]
    输出:[1]
    示例 4
    • 1
    • 2
    • 3
    输入:root = [1,2]
    输出:[1,2]
    
    • 1
    • 2

    解决

    DFS完成序列化/反序列化

    go

    type TreeNode struct {
    	Val int
    	Left *TreeNode
    	Right *TreeNode
    }
    
    type Codec struct {
    	DataList []string
    }
    
    // Serializes a tree to a single string.
    func (this *Codec) serialize(root *TreeNode) string {
    	if root == nil{
    		return "null"
    	}
    	return strconv.Itoa(root.Val)+","+this.serialize(root.Left)+","+this.serialize(root.Right)
    }
    
    func Constructor() Codec{
    	return Codec{}
    }
    
    // Deserializes your encoded data to tree.
    func (this *Codec) deserialize(data string) *TreeNode {
    	dataList := strings.Split(data,",")
    	this.DataList = dataList
    	return this.dfs()
    }
    
    
    func (this *Codec)dfs() *TreeNode{
    	root := this.DataList[0]
    	this.DataList = this.DataList[1:]
    	if root == "null"{
    		return nil
    	}
    	rootVal, _ := strconv.Atoi(root)
    	t := &TreeNode{Val: rootVal}
    	t.Left = this.dfs()
    	t.Right = this.dfs()
    	return t
    }
    
    • 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
  • 相关阅读:
    Unity的相机跟随和第三人称视角二
    MFC图形函数学习03——画直线段函数
    前端开发编辑器,一轻一重两相宜
    【案例】3D地球(vue+three.js)
    springcloud使用openFeign
    前端知识点、技巧、webpack、性能优化(持续更新~)
    094:vue+openlayers根据zoom的不同,显示不同的地图
    西瓜书-2.5偏差与方差
    决策式AI与生成式AI
    黑马点评--附近商铺
  • 原文地址:https://blog.csdn.net/yixieling4397/article/details/133312576