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修改操作系统时间的方法
May 18 Python
python去除文件中空格、Tab及回车的方法
Apr 12 Python
Python3 加密(hashlib和hmac)模块的实现
Nov 23 Python
Python实现爬虫设置代理IP和伪装成浏览器的方法分享
May 07 Python
python+opencv实现高斯平滑滤波
Jul 21 Python
Python使用Pandas对csv文件进行数据处理的方法
Aug 01 Python
Python Django模板之模板过滤器与自定义模板过滤器示例
Oct 18 Python
python模块如何查看
Jun 16 Python
tensorflow使用CNN分析mnist手写体数字数据集
Jun 17 Python
python三引号如何输入
Jul 06 Python
Python 实现国产SM3加密算法的示例代码
Sep 21 Python
Pygame Draw绘图函数的具体使用
Nov 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
隐藏X-Space个人空间下方版权方法隐藏X-Space个人空间标题隐藏X-Space个人空间管理版权方法
2007/02/22 PHP
腾讯微博提示missing parameter errorcode 102 错误的解决方法
2014/12/22 PHP
asp.net+jquery滚动滚动条加载数据的下拉控件
2010/06/25 Javascript
JavaScript 反科里化 this [译]
2012/09/20 Javascript
自动设置iframe大小的jQuery代码
2013/09/11 Javascript
一个支付页面DEMO附截图
2014/07/22 Javascript
浅谈JavaScript中定义变量时有无var声明的区别
2014/08/18 Javascript
webpack中引用jquery的简单实现
2016/06/08 Javascript
JS判断来路是否是百度等搜索索引进行弹窗或自动跳转的实现代码
2016/10/09 Javascript
JavaScript的变量声明提升问题浅析(Hoisting)
2016/11/30 Javascript
详解微信小程序与内嵌网页交互实现支付功能
2018/10/22 Javascript
详解Vue项目部署遇到的问题及解决方案
2019/01/11 Javascript
Vue路由前后端设计总结
2019/08/06 Javascript
jQuery实现弹出层效果
2019/12/10 jQuery
[41:54]2018DOTA2亚洲邀请赛 4.1 小组赛A组加赛 TNC vs Liquid
2018/04/03 DOTA
[01:36:17]DOTA2-DPC中国联赛 正赛 Ehome vs iG BO3 第一场 1月31日
2021/03/11 DOTA
用map函数来完成Python并行任务的简单示例
2015/04/02 Python
Python并发:多线程与多进程的详解
2019/01/24 Python
Python实现定期检查源目录与备份目录的差异并进行备份功能示例
2019/02/27 Python
Python切图九宫格的实现方法
2019/10/10 Python
TensorFlow keras卷积神经网络 添加L2正则化方式
2020/05/22 Python
Html+Css+Jquery实现左侧滑动拉伸导航菜单栏的示例代码
2020/03/17 HTML / CSS
医学生自我鉴定范文
2013/11/08 职场文书
资金主管岗位职责范本
2014/03/04 职场文书
遗体告别仪式主持词
2014/03/20 职场文书
竞争上岗演讲稿范文
2014/05/12 职场文书
技校毕业生自荐信
2014/06/03 职场文书
老龄工作先进事迹
2014/08/15 职场文书
党的群众路线教育实践活动领导班子整改方案
2014/10/25 职场文书
财务工作检讨书
2014/10/29 职场文书
2015年民主生活会发言材料
2014/12/15 职场文书
银行给客户的感谢信
2015/01/23 职场文书
法人代表证明书范本
2015/06/18 职场文书
施工现场安全管理制度
2015/08/05 职场文书
Java常用函数式接口总结
2021/06/29 Java/Android
Python+Matplotlib+LaTeX玩转数学公式
2022/02/24 Python