python实现层次遍历二叉树(Python实现的序列化和反序列化二叉树算法示例)
类别:脚本大全 浏览量:1481
时间:2022-01-21 00:26:09 python实现层次遍历二叉树
Python实现的序列化和反序列化二叉树算法示例本文实例讲述了Python实现的序列化和反序列化二叉树算法。分享给大家供大家参考,具体如下:
题目描述
请实现两个函数,分别用来序列化和反序列化二叉树
序列化二叉树
先序遍历二叉树
|
def recursionSerialize( self , root): series = '' if root = = None : series + = ',$' else : series + = ( ',' + str (root.val)) series + = self .recursionSerialize(root.left) series + = self .recursionSerialize(root.right) return series def Serialize( self , root): return self .recursionSerialize(root)[ 1 :] |
结果:
|
root = TreeNode( 11 ) root.left = TreeNode( 2 ) root.right = TreeNode( 3 ) series = Solution().Serialize(root) print (series) >>> 11 , 2 ,$,$, 3 ,$,$ |
反序列化
先构建根节点,然后左节点,右节点,同样是递归
注意由于使用的是字符串的表示形式,可以先转化为list,
|
print (series.split( ',' )) >>>[ '11' , '2' , '$' , '$' , '3' , '$' , '$' ] |
然后再处理就不需要将大于10的数字转换过来了:
|
def getValue( self , s, sIndex): #处理超过10的数字,将数字字符转变为数字 val = 0 while ord (s[sIndex]) < = ord ( '9' ) and ord (s[sIndex]) > = ord ( '0' ): val = val * 10 + int (s[sIndex]) sIndex + = 1 return val, sIndex - 1 |
下面是反序列化的递归函数:
|
def Deserialize( self , s): if self .sIndex < len (s): if s[ self .sIndex] = = ',' : self .sIndex + = 1 if s[ self .sIndex] = = '$' : return None val, self .sIndex = self .getValue(s, self .sIndex) treeNode = TreeNode(val) self .sIndex + = 1 treeNode.left = self .Deserialize(s) self .sIndex + = 1 treeNode.right = self .Deserialize(s) return treeNode |
完整解法
|
class TreeNode: def __init__( self , x): self .val = x self .left = None self .right = None class Solution: def __init__( self ): self .sIndex = 0 def recursionSerialize( self , root): series = '' if root = = None : series + = ',$' else : series + = ( ',' + str (root.val)) series + = self .recursionSerialize(root.left) series + = self .recursionSerialize(root.right) return series def Serialize( self , root): return self .recursionSerialize(root)[ 1 :] def getValue( self , s, sIndex): #处理超过10的数字,将数字字符转变为数字 val = 0 while ord (s[sIndex]) < = ord ( '9' ) and ord (s[sIndex]) > = ord ( '0' ): val = val * 10 + int (s[sIndex]) sIndex + = 1 return val, sIndex - 1 def Deserialize( self , s): if self .sIndex < len (s): if s[ self .sIndex] = = ',' : self .sIndex + = 1 if s[ self .sIndex] = = '$' : return None val, self .sIndex = self .getValue(s, self .sIndex) treeNode = TreeNode(val) self .sIndex + = 1 treeNode.left = self .Deserialize(s) self .sIndex + = 1 treeNode.right = self .Deserialize(s) return treeNode |
希望本文所述对大家Python程序设计有所帮助。
原文链接:https://blog.csdn.net/weixin_36372879/article/details/84308428
您可能感兴趣
- docker镜像内安装python包(如何使用Docker搭建pypi私有仓库)
- python彩色字符视频代码(python将视频转换为全字符视频)
- python与php(解决Python3 被PHP程序调用执行返回乱码的问题)
- python3.5 tkinter教程(解决python3.5 正常安装 却不能直接使用Tkinter包的问题)
- python函数基本使用(Python3中exp函数用法分析)
- python的条件判断和循环(对Python中的条件判断、循环以及循环的终止方法详解)
- python怎么自动刷抖音(python实现抖音点赞功能)
- python str类型怎么转换(Python3中的bytes和str类型详解)
- python实现将txt转化为excel(python实现Excel文件转换为TXT文件)
- python中pip和pip3有什么区别(ISAPI-REWRITE伪静态规则写法以及说明)
- docker python如何运行(Docker容器化部署Python应用过程解析)
- python opencv 标记目标(使用Python的OpenCV模块识别滑动验证码的缺口推荐)
- python如何用md5作为文档名(Python生成MD5值的两种方法实例分析)
- python 装饰器模式(python重试装饰器的简单实现方法)
- pythonzipfile的用法(对Python之gzip文件读写的方法详解)
- flask项目微信小程序(Python Flask 搭建微信小程序后台详解)
- 直播带货能赚到很多钱吗(直播带货能赚到很多钱吗现在)
- 做网红真的很能赚钱吗(做网红真的很能赚钱吗)
- 10句英语常用(英语常用900句)
- 爱情能当饭吃吗(爱情能当饭吃吗说说)
- 白T恤穿法(白t恤)
- 你怎么忘了是说先爱我(你怎么忘了如何爱我)
热门推荐
- centos7 apache配置(CentOSLinux下的apache服务器配置与管理方法分享)
- python的几种数据结构(python中的数据结构比较)
- 零基础学php好吗(零基础php编程好学吗)
- python 模块详解(举例讲解Python常用模块)
- python常用的属性和方法(Python进阶之@property动态属性的实现)
- dedecms标题在哪改(dedecms任意页面调用栏目内容标签{dede:field.content/}的方法)
- php7优化技巧(php7性能提升的原因详解)
- mysql查询性能优化详解(实例讲解MySQL 慢查询)
- python响应处理post请求(Python3模拟curl发送post请求操作示例)
- 腾讯云开启所有端口(腾讯云端口怎么设置?腾讯云CVM开启端口图文教程)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9