Serialization Of Tree(树的序列化和反序列化)
题目描述:
二叉树被记录文件的过程称为二叉树的序列化。通过文件来重建二叉树的过程称为二叉树的反序列化。给定一棵树的头结点head,设计一种二叉树序列化和反序列化的方案。
例子:
我们用!放在遍历结果的后面表示当前节点的结束,用#!表示当前节点为空结束。这样通过先序遍历一棵树得到的结果为:12!3!#!#!#!.
解题思路:
所以我们可以利用树的先序遍历来得到一棵树的序列化结果。在遍历每个节点后加上!,在每个根节点后面加上#!.
代码如下:
|
|
解题思路2:
对于树我们也可以使用按层遍历的方法得到其序列化的结果。使用的规则和上诉的一致,我们在节点结束后加上!,在空节点上加上#!.
代码如下:
|
|
解题思路3
对于反序列化而言,我们首先要将拿到的字符串根据!隔开,分隔出每个节点的数值。因为原始数据是根据先序遍历得到的,所以假设在分隔后得到的字符串数组是[“12”,”3”,”#”,”#”,”#”].我们首先取出第一个字符串,开辟空间新建节点,用剩下的数据作为其左子树;取出第二个节点3生成节点,用剩下的作为左子树,发现是空节点,所以用剩下的构建右子树依旧是空节点;所以用[“#”,”#”]构建12节点的右子树。
代码如下:
|
|