python写一个二叉树(Python二叉搜索树与双向链表转换算法示例)
类别:脚本大全 浏览量:2907
时间:2022-01-16 00:39:49 python写一个二叉树
Python二叉搜索树与双向链表转换算法示例本文实例讲述了Python二叉搜索树与双向链表转换算法。分享给大家供大家参考,具体如下:
题目描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
普通的二叉树也可以转换成双向链表,只不过不是排序的
思路:
1. 与中序遍历相同
2. 采用递归,先链接左指针,再链接右指针
代码1,更改doubleLinkedList,最后返回list的第一个元素:
|
class TreeNode: def __init__( self , x): self .val = x self .left = None self .right = None class Solution: def lastElem( self , list ): if len ( list ) = = 0 : return None else : return list [ len ( list ) - 1 ] def ConvertCore( self , pRoot, doubleLinkedList): if pRoot: if pRoot.left: self .ConvertCore(pRoot.left, doubleLinkedList) pRoot.left = self .lastElem(doubleLinkedList) if self .lastElem(doubleLinkedList): self .lastElem(doubleLinkedList).right = pRoot doubleLinkedList.append(pRoot) if pRoot.right: self .ConvertCore(pRoot.right, doubleLinkedList) def Convert( self , pRootOfTree): if pRootOfTree = = None : return None doubleLinkedList = [] self .ConvertCore(pRootOfTree, doubleLinkedList) return doubleLinkedList[ 0 ] |
代码2,lastListNode指向双向链表中的最后一个节点,因此每次操作最后一个节点。这里要更改值,因此采用list的形式。
|
class TreeNode: def __init__( self , x): self .val = x self .left = None self .right = None class Solution: def ConvertCore( self , pRoot, lastListNode): if pRoot: if pRoot.left: self .ConvertCore(pRoot.left, lastListNode) pRoot.left = lastListNode[ 0 ] if lastListNode[ 0 ]: lastListNode[ 0 ].right = pRoot lastListNode[ 0 ] = pRoot if pRoot.right: self .ConvertCore(pRoot.right, lastListNode) def Convert( self , pRootOfTree): # write code here if pRootOfTree = = None : return None lastListNode = [ None ] self .ConvertCore(pRootOfTree, lastListNode) while lastListNode[ 0 ].left: lastListNode[ 0 ] = lastListNode[ 0 ].left return lastListNode[ 0 ] |
希望本文所述对大家Python程序设计有所帮助。
原文链接:https://blog.csdn.net/weixin_36372879/article/details/84258821
您可能感兴趣
- 抖音上很火的表白程序链接(我喜欢你 抖音表白程序python版)
- python常用列表函数和方法(Python enumerate函数功能与用法示例)
- python语句for循环(Python基础之循环语句用法示例for、while循环)
- python常用的切片操作(使用python PIL库实现简单验证码的去噪方法步骤)
- pythonpandas数据类型(Python3.5 Pandas模块之Series用法实例分析)
- python中的reload(搞清楚 Python traceback的具体使用方法)
- python使用aes加密解密(python实现AES加密与解密)
- pythonrequests怎么导入模块(Python3使用requests模块实现显示下载进度的方法详解)
- python中列表操作五种常用方法(Python使用paramiko操作linux的方法讲解)
- python程序运行步骤(详解python运行三种方式)
- 随意化快排python算法(python快排算法详解)
- python处理tcp包(Python3使用TCP编写一个简易的文件下载器功能)
- python切片的用法(Python进阶之全面解读高级特性之切片)
- python读取和写入数据excel(Python向excel中写入数据的方法)
- python的os模块操作(Python OS模块实例详解)
- pythonshell入门教程(python获取交互式ssh shell的方法)
- 《寄生虫》 三观不正 人类悲欢从来不相通,感同身受也并非本能(寄生虫三观不正)
- 这部动漫中的女孩子,可比101女孩更加励志(这部动漫中的女孩子)
- 《白狐的人生》热拍 贾征宇偶像包袱难自弃 图(白狐的人生热拍)
- 七夕取消了,牛郎织女没做核酸七夕已经取消(牛郎织女没做核酸七夕已经取消)
- 网友抵制 多地取消 夏日祭 为何惹众怒(网友抵制多地取消)
- 兄弟萌,今年的七夕又取消了 思考 思考(今年的七夕又取消了)
热门推荐
- apache虚拟目录配置(Apache 添加虚拟目录注意事项)
- javascript四种数组(javascript数组includes、reduce的基本使用)
- Docker 部署单机版 Pulsar 和集群架构 Redis(开发神器)的方法(Docker 部署单机版 Pulsar 和集群架构 Redis开发神器的方法)
- 100道python真实面试题附答案(值得收藏的10道python 面试题)
- vue中什么时候需要set属性(Vue.set和this.$set使用和区别)
- 游标和sql语句区别(详解SQL游标的用法)
- dede执行查询语句(dede调用指定栏目下相关文章的实现方法)
- axios自动重复提交请求(Axios取消重复请求的方法实例详解)
- dedecms 数据转移(dedecms5.7 通过替换文件升级后 所有档案列表为空的解决方法)
- python 制作图片文字识别(如何使用Python进行OCR识别图片中的文字)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9