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函数式编程源码(python仿evething的文件搜索器实例代码)
- python操作sql server数据库(Python 数据库操作 SQLAlchemy的示例代码)
- python批量创建字典(Python编写合并字典并实现敏感目录的小脚本)
- python线程池如何实现同步(Python mutiprocessing多线程池pool操作示例)
- python的log函数(Python3 log10函数简单用法)
- python图像变换教程(详解python-图像处理映射变换)
- python监控系统界面(Python远程视频监控程序的实例代码)
- python有哪几种赋值(关于python多重赋值的小问题)
- python数据分割教程(python3对拉勾数据进行可视化分析的方法详解)
- pythonexcel报表实例(对python生成业务报表的实例详解)
- python进行回归分析(Python多项式回归的实现方法)
- python 从入门到实践笔记(python基础梳理一推荐)
- python直接查询mongodb(pymongo中聚合查询的使用方法)
- python开启两个线程(Python开启线程,在函数中开线程的实例)
- python中怎么实现队列的创建(python 堆和优先队列的使用详解)
- pythonlambda是什么函数(Python之lambda匿名函数及map和filter的用法)
- 真牛 禹州将建成中等城市(禹州将建成中等城市)
- 被骂欺师灭祖,与郭德纲公开叫板,何云伟改名何沄伟,开始画画了(与郭德纲公开叫板)
- 相声转行影帝,被何晴抛弃,甩10年女友闪婚生子,刘威不靠谱情史(相声转行影帝被何晴抛弃)
- 岳云鹏不说相声,改行演员了 网友 快回来说相声(岳云鹏不说相声)
- 乔欣首演古装大女主,颜值演技双在线(乔欣首演古装大女主)
- 于正又推女性古装大剧 杨蓉乔欣演女配,两位女主成 重头戏(于正又推女性古装大剧)
热门推荐
- php-fpm配置文件在哪里(PHP-FPM 设置多pool及配置文件重写操作示例)
- filezilla服务器支持断点续传吗(Filezilla Server配置FTP服务器提示操作超时的解决办法)
- mysql安装时服务无法启动(MySQL 实例无法启动的问题分析及解决)
- html5 video标签
- python下划线怎么用(Python3中_下划线和__双下划线的用途和区别)
- vue前端打包发布教程(Vue项目打包、合并及压缩优化网页响应速度)
- mysql查询killed状态的进程(MySQL kill指令使用指南)
- mysqltruncate分区自定义参数(MySQL truncate table语句的使用)
- mysql 临时表
- h1标签的作用
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9