博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
树(7)-----二叉树的序列化和反序列化
阅读量:7038 次
发布时间:2019-06-28

本文共 2465 字,大约阅读时间需要 8 分钟。

1、序列化:层次遍历【用字符串来存储】

2、反序列化:用队列存已经建立的节点,从序列化后的字符串列表取数来建立树

def serialize(self, root):        """Encodes a tree to a single string.                :type root: TreeNode        :rtype: str        """        if not root:            return ""        prev,strres=[root],""        while prev:            cur=[]            while prev:                node=prev.pop(0)                if node:                    strres+=str(node.val)+','                    cur.append(node.left)                    cur.append(node.right)                else:                    strres+='#'+','            prev=cur        return strres[:-1]            def deserialize(self, data):        """Decodes your encoded data to tree.                :type data: str        :rtype: TreeNode        """        if not data:            return None        listdata=data.split(',')        root=TreeNode(listdata[0])        queue=[root]        i=0        while queue:            node=queue.pop(0)            if listdata[i+1]!='#':                node.left=TreeNode(listdata[i+1])                queue.append(node.left)            i+=1            if listdata[i+1]!='#':                node.right=TreeNode(listdata[i+1])                queue.append(node.right)            i+=1        return root

 二、前序遍历的序列化:

代码:

class Tree:    def __init__(self,val):        self.val =val        self.left = None        self.right = None#主要函数def preOrder(head):    if not head:        return '#!'    s = str(head.val) + '!'    s += preOrder(head.left)    s += preOrder(head.right)    return stree = Tree(12)tree.left = Tree(3)preOrder(tree)

反序列化:

class Tree:    def __init__(self,val):        self.val =val        self.left = None        self.right = Nonedef repreOrder(s):    if not s:        return None    arr = s.split('!')    return reconPre(arr)def reconPre(arr):    if arr:        value = arr.pop(0)        if value == '#':            return None        head = Tree(int(value))        head.left = reconPre(arr)        head.right = reconPre(arr)        return head    else:        return Nones = '12!3!#!#!#!'repreOrder(s)

 

3、前序遍历和中序遍历反序列化

def buildTree(self, preorder, inorder):        if preorder and inorder:            root=TreeNode(preorder[0])            k=inorder.index(preorder[0])            m=len(inorder[:k])            root.left=self.buildTree(preorder[1:1+m],inorder[0:k])            root.right=self.buildTree(preorder[1+m:],inorder[k+1:])            return root

 

转载于:https://www.cnblogs.com/Lee-yl/p/9250242.html

你可能感兴趣的文章
设计模式 : Template method 模板方法模式 -- 行为型
查看>>
第二十九节,装饰器
查看>>
[LintCode] Valid Palindrome 验证回文字符串
查看>>
jQuery的基本语法
查看>>
javascript 数组实例
查看>>
iOS开发UI篇—CAlayer(创建图层)
查看>>
深入理解javascript事件流
查看>>
通过js写一个消息弹框
查看>>
ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var mysql 启动不了
查看>>
Leetcode: Non-overlapping Intervals
查看>>
Spring组件扫描<context:component-scan/>使用详解
查看>>
CodeIgniter(3.1.4)框架使用静态文件(js,css)
查看>>
python练习笔记——用函数对列表奇偶分类,且过程不增加新列表
查看>>
CentOS 6.9永久设置静态路由表以及路由表常用设置
查看>>
spring mvc : 中文传值(post/get)中文乱码
查看>>
Mysql中处理1970年前的日期(unixtime为负数的情况)负数时间戳格式化
查看>>
物联网架构成长之路(24)-Docker练习之Compose容器编排
查看>>
iocp (改天完善)
查看>>
水波探测算法的实现
查看>>
JsDemo
查看>>