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 14 Python
使用python加密自己的密码
Aug 04 Python
Linux中Python 环境软件包安装步骤
Mar 31 Python
Python实现简易端口扫描器代码实例
Mar 15 Python
使用Python写一个贪吃蛇游戏实例代码
Aug 21 Python
python输出100以内的质数与合数实例代码
Jul 08 Python
Python 合并多个TXT文件并统计词频的实现
Aug 23 Python
Python GUI自动化实现绕过验证码登录
Jan 10 Python
python中68个内置函数的总结与介绍
Feb 24 Python
2020版Python学习路线图(附学习资料)
Sep 15 Python
pycharm-professional-2020.1下载与激活的教程
Sep 21 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 遍历显示文件夹下所有目录、所有文件的函数,没有分页的代码
2008/11/14 PHP
thinkphp使用literal防止模板标签被解析的方法
2014/11/22 PHP
php在线解压ZIP文件的方法
2014/12/30 PHP
php修改数组键名的方法示例
2017/04/15 PHP
javascript之水平横向滚动歌词同步的应用
2007/05/07 Javascript
jQuery表格行换色的三种实现方法
2011/06/27 Javascript
JS模板实现方法
2013/04/03 Javascript
javascript实现修改微信分享的标题内容等
2014/12/11 Javascript
jQuery创建自定义的选择器用以选择高度大于100的超链接实例
2015/03/18 Javascript
拥有一个属于自己的javascript表单验证插件
2016/03/24 Javascript
angularjs实现的前端分页控件示例
2017/02/10 Javascript
详细AngularJs4的图片剪裁组件的实例
2017/07/12 Javascript
jquery+css实现下拉列表功能
2017/09/03 jQuery
微信小程序利用云函数获取手机号码
2019/12/17 Javascript
vue抽出组件并传值实例
2020/07/31 Javascript
[01:30]DOTA2上海特锦赛现场采访 Loda倾情献唱
2016/03/25 DOTA
[02:28]PWL开团时刻DAY3——Ink Ice与DeMonsTer之间的勾心斗角
2020/11/03 DOTA
Python利用IPython提高开发效率
2016/08/10 Python
python脚本生成caffe train_list.txt的方法
2018/04/27 Python
python正则表达式去除两个特殊字符间的内容方法
2018/12/24 Python
python动态视频下载器的实现方法
2019/09/16 Python
详解Python中的文件操作
2021/01/14 Python
canvas画布实现手写签名效果的示例代码
2019/04/23 HTML / CSS
基于html5 canvas实现漫天飞雪效果实例
2014/09/10 HTML / CSS
DKNY品牌官网:纽约大都会时尚风格
2016/10/20 全球购物
印度服装购物网站:Limeroad
2018/09/26 全球购物
捷科时代的软件测试笔试题
2015/11/09 面试题
文员个人的求职信范文
2013/09/26 职场文书
会计找工作求职信范文
2013/12/09 职场文书
小学生班会演讲稿
2014/01/09 职场文书
24岁生日感言
2014/01/13 职场文书
大学生自我鉴定范文模板
2014/01/21 职场文书
党员群众路线自我剖析材料
2014/10/06 职场文书
纪检监察立案决定书
2015/06/24 职场文书
远程教育集中轮训基层干部培训班学习心得体会
2016/01/09 职场文书
Vite + React从零开始搭建一个开源组件库
2022/06/25 Javascript