二叉树的反序列化

反序列化

树的反序列化故名知意就是将一个序列化成字符串或者其它形式的数据重新的生成一颗二叉树,如下这颗二叉树将它序列化成字符串后的结果[5,4,null,null,3,2,1],而现在要做的是要将这个字符串重新的生成一颗二叉树(生成下面这颗树,因为这个字符串就是通过这颗树序列化来的)。

解题思路

nullnullsplitFIFO

TreeNode结构体

这个里面的数据很容易就看懂,val是当前节点的数据;left ,right分别保存的是左支和右支的数据

针对每个数据生成对应的TreeNode

这个方法主要是生成TreeNode对象的方法,上面说到当节点下面没有子节点的时候就会用null来表不,所以这里接收到的形参如果是null的话就会反回一个空指针,相反如果不是null就会反回一个创建的TreeNode对象,并将val属性赋值

反序列化方法

代码解读

这个方法的代码比较多,这里就会块来说一下:

这几行代码无非就是一个边界条件的判断的问题,当传来的队列没有数据的时候就返回一个空,为啥是队列?因为我将字符串转成了队列

var tempNodeQueue []*TreeNode
resultNode = generateNode(dataQueue[len(dataQueue) - 1])generateNode
dataQueue = dataQueue[:len(dataQueue) - 1]
tempNodeQueue = append(tempNodeQueue,resultNode)

当进入For循环后,也就证明现在这个队列里面有数据,不管三七二十一,先将里面的数据弹出,因为只有有了数据才可以进行下面的操作(无数据,不编程)

tempNodeQueue = tempNodeQueue[1:]
tempNode.left = generateNode(dataQueue[len(dataQueue) - 1])
tempNodeQueue = append(tempNodeQueue,tempNode.left)tempNodeQueue

可能有小伙伴存在疑问?

resultNode
resultNode

二叉树的序列化

介绍

树的序列化又是怎么一回事呢?我可以将这颗树转换成一定格式的数据结构,比如:转换成一段文本可以持久化到硬盘中。

Redis

这里说的树的序列化你也可以这样的理解,我要将一颗二叉树里面的数据序列化保存到硬盘,以便下次使用这里面的数的据的时候可以直接生成这颗树

解题思路

null

代码

代码解读

这些代码还是很好看懂的,这里就说下for里面的代码吧~~

tempNode = tempQueue[0]
saveSerData = append(saveSerData, tempNode.val)tempNodesaveSerData
ifnull
tempQueue = tempQueue[1:]
tempQueue = append(tempQueue, tempNode.left)

运行结果