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
您可能感兴趣
- python怎么设置matlab编程(实例详解Matlab 与 Python 的区别)
- python脚本压缩包解密(详解Python 解压缩文件)
- python加密与解密(python实现简单加密解密机制)
- opencv 图像匹配python(OpenCV+Python识别车牌和字符分割的实现)
- python pandas 匹配值(python 使用pandas计算累积求和的方法)
- 学python从零基础到开发游戏(python开发游戏的前期准备)
- 用python如何写tkinter(浅谈python3.6的tkinter运行问题)
- python里面的time如何用(详解python:time模块用法)
- python统计图参数(Python使用统计函数绘制简单图形实例代码)
- python中tkinter模块窗口操作(详解python tkinter教程-事件绑定)
- pythonredis列表(Python redis操作实例分析连接、管道、发布和订阅等)
- python 基于内容的推荐系统(不到40行代码用Python实现一个简单的推荐系统)
- python图书管理系统(python面向对象法实现图书管理系统)
- python中dict怎么创建(Python数据类型之Dict字典实例详解)
- python 二维数组怎么取第二列(python实现二维数组的对角线遍历)
- python发送微信消息脚本(python实现微信定时每天和女友发送消息)
- 34岁的舒畅,就这样走到了末路,不知会不会后悔15年前的草率决定(就这样走到了末路)
- 不走心的古装造型 舒畅 毁容式 出演,萧蔷雷出新高度(不走心的古装造型)
- 嘉南传 第22集(嘉南传第22集)
- 哪版孙悟空最萌 黄渤躺萌了(哪版孙悟空最萌)
- 融入小人物的喜怒哀乐,黄渤饰演的角色为什么让人观看时欲罢不能(融入小人物的喜怒哀乐)
- 《极限挑战》深访都市夜归人,夜间打工者体验,黄磊录完憔悴了(极限挑战深访都市夜归人)
热门推荐
- 编写HTML格式的邮件需注意的地方
- mysql百万数据分页查询优化方案(MySQL单表亿级数据分页怎么优化?)
- 织梦cms指定栏目怎么取(织梦CMS后台模板列表按字母排序方法)
- Visual Studio中 sln 和 suo 文件
- VPS主机如何预防挂马?(VPS主机如何预防挂马?)
- sqlserver日期转换(SqlServer 查询时日期格式化语句)
- linux安装phpstudy(PHPStudy下如何为Apache安装SSL证书的方法步骤)
- 怎么查看mysql运行日志(通过Query Profiler查看MySQL语句运行时间的操作方法)
- sqlserver并发性能(sql server中的任务调度与CPU深入讲解)
- laravel配置文件动态化(在Laravel 的 Blade 模版中实现定义变量)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9