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解析命令行读取参数--argparse模块使用方法
Jan 23 Python
wx.CheckBox创建复选框控件并响应鼠标点击事件
Apr 25 Python
python使用代理ip访问网站的实例
May 07 Python
网红编程语言Python将纳入高考你怎么看?
Jun 07 Python
python async with和async for的使用
Jun 20 Python
django数据模型on_delete, db_constraint的使用详解
Dec 24 Python
Python实现大数据收集至excel的思路详解
Jan 03 Python
Python opencv相机标定实现原理及步骤详解
Apr 09 Python
python中rb含义理解
Jun 18 Python
selenium自动化测试入门实战
Dec 21 Python
Python time库的时间时钟处理
May 02 Python
pytorch常用数据类型所占字节数对照表一览
May 17 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
PHP 文件上传进度条的两种实现方法的代码
2007/11/25 PHP
PHP rsa加密解密使用方法
2015/04/27 PHP
在php中设置session用memcache来存储的方法总结
2016/01/14 PHP
php自动加载方式集合
2016/04/04 PHP
Thinkphp5.0自动生成模块及目录的方法详解
2017/04/17 PHP
PHP数据分析引擎计算余弦相似度算法示例
2017/08/08 PHP
apache集成php7.3.5的详细步骤
2019/06/20 PHP
php设计模式之适配器模式实例分析【星际争霸游戏案例】
2020/04/07 PHP
JScript中的"this"关键字使用方式补充材料
2007/03/08 Javascript
javascript 实现父窗口引用弹出窗口的值的脚本
2007/08/07 Javascript
json 实例详细说明教程
2009/10/31 Javascript
JS正则中的RegExp对象对象
2012/11/07 Javascript
用jquery模仿的a的title属性(兼容ie6/7)
2013/01/21 Javascript
js获取class的所有元素
2013/03/28 Javascript
jQuery操作checkbox选择(list/table)
2013/04/07 Javascript
在jquery中的ajax方法怎样通过JSONP进行远程调用
2014/04/04 Javascript
检测一个函数是否是JavaScript原生函数的小技巧
2015/03/13 Javascript
JQuery中DOM加载与事件执行实例分析
2015/06/13 Javascript
最常见和最有用的字符串相关的方法详解
2017/02/06 Javascript
详解Angular2 关于*ngFor 嵌套循环
2017/05/22 Javascript
详解Vue中CSS样式穿透问题
2019/09/12 Javascript
原生JS实现汇率转换功能代码实例
2020/05/13 Javascript
浅析Python中return和finally共同挖的坑
2017/08/18 Python
用tensorflow构建线性回归模型的示例代码
2018/03/05 Python
Python实现针对给定字符串寻找最长非重复子串的方法
2018/04/21 Python
基于随机梯度下降的矩阵分解推荐算法(python)
2018/08/31 Python
Django实现图片上传功能步骤解析
2020/04/22 Python
matplotlib交互式数据光标实现(mplcursors)
2021/01/13 Python
奥地利手表、香水、化妆品和珠宝购物网站:Brasty.at
2021/01/17 全球购物
大学毕业生通用求职信
2013/09/28 职场文书
建筑学专业自荐书
2014/07/09 职场文书
夫妻忠诚协议书范本
2014/11/17 职场文书
百年孤独读书笔记
2015/06/29 职场文书
《一面五星红旗》教学反思
2016/02/23 职场文书
2019年怎样才能撰写出优秀的自荐信
2019/03/25 职场文书
vue响应式原理与双向数据的深入解析
2021/06/04 Vue.js