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 07 Python
Python中几个比较常见的名词解释
Jul 04 Python
Pycharm学习教程(3) 代码运行调试
May 03 Python
Python编程实现蚁群算法详解
Nov 13 Python
Python3的介绍、安装和命令行的认识(推荐)
Oct 20 Python
Python面向对象之类和对象属性的增删改查操作示例
Dec 14 Python
详解python中sort排序使用
Mar 23 Python
基于Python2、Python3中reload()的不同用法介绍
Aug 12 Python
Python中turtle库的使用实例
Sep 09 Python
opencv 查找连通区域 最大面积实例
Jun 04 Python
Django日志及中间件模块应用案例
Sep 10 Python
使用Pytorch搭建模型的步骤
Nov 16 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通过cookies获取远程网页的指定代码
2013/06/25 PHP
详解PHP的Yii框架中日志的相关配置及使用
2015/12/08 PHP
laravel中的错误与日志用法详解
2016/07/26 PHP
准确获得页面、窗口高度及宽度的JS
2006/11/26 Javascript
根据判断浏览器类型屏幕分辨率自动调用不同CSS的代码
2007/02/22 Javascript
半角全角相互转换的js函数
2009/10/16 Javascript
Asp.net下使用Jquery Ajax传送和接收DataTable的代码
2010/09/12 Javascript
善用事件代理,警惕闭包的性能陷阱。
2011/01/20 Javascript
JavaScript常用全局属性与方法记录积累
2013/07/03 Javascript
js(JavaScript)实现TAB标签切换效果的简单实例
2014/02/26 Javascript
JavaScript中解析JSON数据的三种方法
2015/07/03 Javascript
javascript实现根据iphone屏幕方向调用不同样式表的方法
2015/07/13 Javascript
简单的渐变轮播插件
2017/01/12 Javascript
Boostrap栅格系统与自己额外定义的媒体查询的冲突问题
2017/02/19 Javascript
JavaScript实现点击出现图片并统计点击次数功能示例
2018/07/23 Javascript
简述vue路由打开一个新的窗口的方法
2018/11/29 Javascript
vue插件mescroll.js实现移动端上拉加载和下拉刷新
2019/03/07 Javascript
Python中json格式数据的编码与解码方法详解
2016/07/01 Python
浅谈django model的get和filter方法的区别(必看篇)
2017/05/23 Python
tensorflow训练中出现nan问题的解决
2018/02/10 Python
python正则表达式匹配[]中间为任意字符的实例
2018/12/25 Python
python实现上传文件到linux指定目录的方法
2020/01/03 Python
pytorch 模型的train模式与eval模式实例
2020/02/20 Python
Python PIL库图片灰化处理
2020/04/07 Python
解决python中import文件夹下面py文件报错问题
2020/06/01 Python
python实现扫雷游戏的示例
2020/10/20 Python
python中time tzset()函数实例用法
2021/02/18 Python
图解CSS3制作圆环形进度条的实例教程
2016/05/26 HTML / CSS
html5定制表单_动力节点Java学院整理
2017/07/11 HTML / CSS
HTML5样式控制示例代码
2013/11/27 HTML / CSS
珍珠鸟教学反思
2014/02/01 职场文书
项目负责人任命书
2014/06/04 职场文书
合作意向书
2014/07/30 职场文书
群众路线自查自纠工作情况报告
2014/10/28 职场文书
企业计划生育责任书
2015/05/09 职场文书
鸡毛信观后感
2015/06/11 职场文书