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实现批量转换文件编码(批转换编码示例)
Jan 23 Python
python写xml文件的操作实例
Oct 05 Python
零基础写python爬虫之使用Scrapy框架编写爬虫
Nov 07 Python
python实现定时同步本机与北京时间的方法
Mar 24 Python
Python使用cx_Freeze库生成msi格式安装文件的方法
Jul 10 Python
python实现批量注册网站用户的示例
Feb 22 Python
一篇文章彻底搞懂Python中可迭代(Iterable)、迭代器(Iterator)与生成器(Generator)的概念
May 13 Python
python获取地震信息 微信实时推送
Jun 18 Python
Python开发之身份证验证库id_validator验证身份证号合法性及根据身份证号返回住址年龄等信息
Mar 20 Python
opencv 查找连通区域 最大面积实例
Jun 04 Python
基于django2.2连oracle11g解决版本冲突的问题
Jul 02 Python
Python爬虫分析微博热搜关键词的实现代码
Feb 22 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
PHP5中MVC结构学习
2006/10/09 PHP
php横向重复区域显示二法
2008/09/25 PHP
PHP 使用pcntl和libevent 实现Timer功能
2013/10/27 PHP
php解析json数据实例
2014/08/19 PHP
php根据某字段对多维数组进行排序的方法
2015/03/07 PHP
PHP云打印类完整示例
2016/10/15 PHP
取得一定长度的内容,处理中文
2006/12/20 Javascript
一段利用WSH获取登录时间的jscript代码
2008/05/11 Javascript
JavaScript Undefined,Null类型和NaN值区别
2008/10/22 Javascript
javascript iframe编程相关代码
2009/12/28 Javascript
学习从实践开始之jQuery插件开发 对话框插件开发
2012/04/26 Javascript
jQuery入门介绍之基础知识
2015/01/13 Javascript
jQuery实现鼠标滑过Div层背景变颜色的方法
2015/02/17 Javascript
Ajax分页插件Pagination从前台jQuery到后端java总结
2016/07/22 Javascript
实现easyui的datagrid导出为excel的示例代码
2016/11/10 Javascript
Require.js的基本用法详解
2017/07/03 Javascript
layer弹出层父子页面事件相互调用方法
2018/08/17 Javascript
[01:32]TI奖金增速竟因它再创新高!DOTA2勇士令状不朽珍藏Ⅰ饰品欣赏
2018/05/18 DOTA
[09:34]2018DOTA2国际邀请赛寻真——永不放弃的iG
2018/08/14 DOTA
Python 元类使用说明
2009/12/18 Python
Python迭代器和生成器介绍
2015/03/06 Python
Python实现excel转sqlite的方法
2017/07/17 Python
Python3 加密(hashlib和hmac)模块的实现
2017/11/23 Python
python学习笔记--将python源文件打包成exe文件(pyinstaller)
2018/05/26 Python
Python对切片命名的实现方法
2018/10/16 Python
Python学习笔记之读取文件、OS模块、异常处理、with as语法示例
2019/06/04 Python
Python3标准库之threading进程中管理并发操作方法
2020/03/30 Python
英国现代家具和装饰网站:PN Home
2018/08/16 全球购物
巴西箱包、背包、钱包和旅行配件购物网站:Inovathi
2019/12/14 全球购物
求∏的近似值,直到最后一项的绝对值小于指定的数
2016/02/12 面试题
副厂长岗位职责
2014/02/02 职场文书
美容院经理岗位职责
2014/04/03 职场文书
《有趣的发现》教学反思
2014/04/15 职场文书
爱耳日宣传活动总结
2014/07/05 职场文书
Python 中面向接口编程
2022/05/20 Python
python manim实现排序算法动画示例
2022/08/14 Python