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 字符串操作方法大全
Mar 11 Python
Python闭包之返回函数的函数用法示例
Jan 27 Python
Python实现的求解最小公倍数算法示例
May 03 Python
对Python random模块打乱数组顺序的实例讲解
Nov 08 Python
pandas读取csv文件,分隔符参数sep的实例
Dec 12 Python
Python3爬虫全国地址信息
Jan 05 Python
python实现控制电脑鼠标和键盘,登录QQ的方法示例
Jul 06 Python
python实现的接收邮件功能示例【基于网易POP3服务器】
Sep 11 Python
Python tkinter实现简单加法计算器代码实例
May 13 Python
学python需要去培训机构吗
Jul 01 Python
keras topN显示,自编写代码案例
Jul 03 Python
使用Python通过企业微信应用给企业成员发消息
Apr 18 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
div li的多行多列 无刷新分页示例代码
2013/10/16 PHP
PHP异常处理浅析
2015/05/12 PHP
在云虚拟主机部署thinkphp5项目的步骤详解
2017/12/21 PHP
javascript使用中为什么10..toString()正常而10.toString()出错呢
2013/01/11 Javascript
js 阻止子元素响应父元素的onmouseout事件具体实现
2013/12/23 Javascript
JS获取URL中参数值(QueryString)的4种方法分享
2014/04/12 Javascript
js提交form表单,并传递参数的实现方法
2016/05/25 Javascript
javascript 中iframe高度自适应(同域)实例详解
2017/05/16 Javascript
AngularJS实现进度条功能示例
2017/07/05 Javascript
AngularJS实现的JSONP跨域访问数据传输功能详解
2017/07/20 Javascript
js实现随机点名系统(实例讲解)
2017/10/18 Javascript
详解使用vuex进行菜单管理
2017/12/21 Javascript
vue-cli配置文件——config篇
2018/01/04 Javascript
微信小程序扫描二维码获取信息实例详解
2019/05/07 Javascript
layui添加动态菜单与选项卡
2019/07/26 Javascript
关于layui的动态图标不显示的解决方法
2019/09/04 Javascript
BootStrap表单验证中的非Submit类型按钮点击时触发验证的坑
2019/09/05 Javascript
JavaScript this关键字指向常用情况解析
2020/09/02 Javascript
vue-cli 3如何使用vue-bootstrap-datetimepicker日期插件
2021/02/20 Vue.js
Python的面向对象编程方式学习笔记
2016/07/12 Python
浅谈终端直接执行py文件,不需要python命令
2017/01/23 Python
Python+树莓派+YOLO打造一款人工智能照相机
2018/01/02 Python
pandas object格式转float64格式的方法
2018/04/10 Python
django2用iframe标签完成网页内嵌播放b站视频功能
2018/06/20 Python
selenium+python自动化测试之多窗口切换
2019/01/23 Python
Django ModelForm组件使用方法详解
2019/07/23 Python
浅谈图像处理中掩膜(mask)的意义
2020/02/19 Python
Python之关于类变量的两种赋值区别详解
2020/03/12 Python
Python生成随机验证码代码实例解析
2020/06/09 Python
详解CSS3弹性伸缩盒
2020/09/21 HTML / CSS
Interflora澳大利亚:同日鲜花速递
2019/06/25 全球购物
英国在线定做百叶窗网站:Make My Blinds
2020/08/17 全球购物
Yahoo的PHP面试题
2014/05/26 面试题
大专毕业生简历的自我评价
2013/10/20 职场文书
电气自动化求职信
2014/06/24 职场文书
剧场版《转生恶役只好拔除破灭旗标》公开最新视觉图 2023年上映
2022/04/02 日漫