zoukankan      html  css  js  c++  java
  • Go语言实现:【剑指offer】序列化二叉树

    该题目来源于牛客网《剑指offer》专题。

    请实现两个函数,分别用来序列化和反序列化二叉树。

    二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存。序列化可以基于先序、中序、后序、层序的二叉树遍历方式来进行修改,序列化的结果是一个字符串,序列化时通过 某种符号表示空节点(#),以 !表示一个结点值的结束(value!)。

    二叉树的反序列化是指:根据某种遍历顺序得到的序列化字符串结果str,重构二叉树。

    Go语言实现:

    type TreeNode struct {
       Val   int
       Left  *TreeNode
       Right *TreeNode
    }//序列化
    func serialize(root *TreeNode) string {
       str := ""
       if root == nil {
          str += "#!"
          return str
       }
       str += strconv.Itoa(root.Val)
       str += serialize(root.Left)
       str += serialize(root.Right)
       return str
    }var index = -1
    //反序列化
    func deserialize(str string) *TreeNode {
       strArray := strings.Split(str,"!")
       node := &TreeNode{}
       index++
       //最后一个index截取后为空
       if strArray[index] != "#" {
          val, _ := strconv.Atoi(strArray[index])
          node.Val = val
          node.Left = deserialize(str)
          node.Right = deserialize(str)
       }
       return node
    }
    
  • 相关阅读:
    JS高级
    函数作用域面试题
    11.14
    11.13
    Redux知识
    react-router-dom
    react 的三大属性
    vuex
    数组的扩展
    函数作用域和 class
  • 原文地址:https://www.cnblogs.com/dubinyang/p/12099385.html
Copyright © 2011-2022 走看看