二叉树的序列化与反序列化
生活随笔
收集整理的这篇文章主要介绍了
二叉树的序列化与反序列化
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
题目:
序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。
请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。
思路:题目意思就是二叉树的遍历和二叉树的建立
type Codec struct {l []string }func Constructor() Codec {return Codec{} }//序列化 func rserialize(root *TreeNode, str string) string {if root == nil {str += "null,"} else {str += strconv.Itoa(root.Val) + ","str = rserialize(root.Left, str)str = rserialize(root.Right, str)}return str }// Serializes a tree to a single string. func (this *Codec) serialize(root *TreeNode) string {return rserialize(root, "") }// Deserializes your encoded data to tree. func (this *Codec) deserialize(data string) *TreeNode {l := strings.Split(data, ",")for i := 0; i < len(l); i++ {if l[i] != "" {this.l = append(this.l, l[i])}}return this.rdeserialize() }func (this *Codec) rdeserialize() *TreeNode {if this.l[0] == "null" {this.l = this.l[1:]return nil}val, _ := strconv.Atoi(this.l[0])root := &TreeNode{Val: val}this.l = this.l[1:]root.Left = this.rdeserialize()root.Right = this.rdeserialize()return root }
代码地址:https://leetcode-cn.com/problems/serialize-and-deserialize-binary-tree/solution/er-cha-shu-de-xu-lie-hua-yu-fan-xu-lie-hua-by-le-2/
《新程序员》:云原生和全面数字化实践50位技术专家共同创作,文字、视频、音频交互阅读总结
以上是生活随笔为你收集整理的二叉树的序列化与反序列化的全部内容,希望文章能够帮你解决所遇到的问题。