二叉树的序列化与反序列化
生活随笔
收集整理的這篇文章主要介紹了
二叉树的序列化与反序列化
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目:
序列化是將一個數據結構或者對象轉換為連續的比特位的操作,進而可以將轉換后的數據存儲在一個文件或者內存中,同時也可以通過網絡傳輸到另一個計算機環境,采取相反方式重構得到原數據。
請設計一個算法來實現二叉樹的序列化與反序列化。這里不限定你的序列 / 反序列化算法執行邏輯,你只需要保證一個二叉樹可以被序列化為一個字符串并且將這個字符串反序列化為原始的樹結構。
思路:題目意思就是二叉樹的遍歷和二叉樹的建立
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位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的二叉树的序列化与反序列化的全部內容,希望文章能夠幫你解決所遇到的問題。