Python二叉搜索树与双向链表转换算法示例


Posted in Python onMarch 02, 2019

本文实例讲述了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程序设计有所帮助。

Python 相关文章推荐
python计算圆周长、面积、球体体积并画出圆
Apr 08 Python
Python的函数的一些高阶特性
Apr 27 Python
python利用正则表达式提取字符串
Dec 08 Python
教你使用python实现微信每天给女朋友说晚安
Mar 23 Python
Python Scapy随心所欲研究TCP协议栈
Nov 20 Python
python配置grpc环境
Jan 01 Python
Python3 执行系统命令并获取实时回显功能
Jul 09 Python
使用Python和Scribus创建一个RGB立方体的方法
Jul 17 Python
使用Python进行中文繁简转换的实现代码
Oct 18 Python
如何解决cmd运行python提示不是内部命令
Jul 01 Python
Python基于mediainfo批量重命名图片文件
Dec 29 Python
PYTHON InceptionV3模型的复现详解
May 06 Python
Python实现的序列化和反序列化二叉树算法示例
Mar 02 #Python
Python求一批字符串的最长公共前缀算法示例
Mar 02 #Python
Python实现判断一个整数是否为回文数算法示例
Mar 02 #Python
python实现转圈打印矩阵
Mar 02 #Python
python实现顺时针打印矩阵
Mar 02 #Python
python实现二维数组的对角线遍历
Mar 02 #Python
python实现矩阵打印
Mar 02 #Python
You might like
新的一年,新的期待:DC在2020年的四部动画电影
2020/01/01 欧美动漫
用php来检测proxy
2006/10/09 PHP
浅谈COOKIE和SESSION区别
2015/07/19 PHP
PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)
2019/11/19 PHP
javascript学习随笔(使用window和frame)的技巧
2007/03/08 Javascript
js中的window.open返回object的错误的解决方法
2009/08/15 Javascript
javascript prototype原型操作笔记
2009/12/07 Javascript
Javascript 判断是否存在函数的方法
2013/01/03 Javascript
javascript parseInt() 函数的进制转换注意细节
2013/01/08 Javascript
js弹出层包含flash 不能关闭隐藏的2种处理方法
2013/06/17 Javascript
JavaScript数据结构和算法之二叉树详解
2015/02/11 Javascript
第八篇Bootstrap下拉菜单实例代码
2016/06/21 Javascript
基于JavaScript定位当前的地理位置
2017/04/11 Javascript
[js高手之路]原型式继承与寄生式继承详解
2017/08/28 Javascript
layui自定义ajax左侧三级菜单
2019/07/26 Javascript
vue3自定义dialog、modal组件的方法
2021/01/04 Vue.js
[46:20]TFT vs Secret Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
python实现可将字符转换成大写的tcp服务器实例
2015/04/29 Python
利用python实现微信头像加红色数字功能
2018/03/26 Python
pandas.DataFrame 根据条件新建列并赋值的方法
2018/04/08 Python
python发送邮件脚本
2018/05/22 Python
python pandas 时间日期的处理实现
2019/07/30 Python
使用PyCharm进行远程开发和调试的实现
2019/11/04 Python
Python正则表达式急速入门(小结)
2019/12/16 Python
基于Python执行dos命令并获取输出的结果
2019/12/30 Python
python实现秒杀商品的微信自动提醒功能(代码详解)
2020/04/27 Python
Python使用os.listdir和os.walk获取文件路径
2020/05/21 Python
意大利折扣和优惠券网站:Groupalia
2019/10/09 全球购物
《生命 生命》教学反思
2014/04/19 职场文书
大二学习计划书范文
2014/04/27 职场文书
党支部遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
群众路线教育实践活动学习笔记内容
2014/11/06 职场文书
试用期自我评价怎么写
2015/03/10 职场文书
消费者投诉书范文
2015/07/02 职场文书
Linux服务器离线安装 nginx的详细步骤
2022/06/16 Servers
腾讯云服务器部署前后分离项目之前端部署
2022/06/28 Servers