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实现程序的单一实例用法分析
Jun 03 Python
在Django框架中编写Contact表单的教程
Jul 17 Python
Python实现SSH远程登陆,并执行命令的方法(分享)
May 08 Python
从django的中间件直接返回请求的方法
May 30 Python
使用Python 统计高频字数的方法
Jan 31 Python
pyside+pyqt实现鼠标右键菜单功能
Dec 08 Python
Django的models模型的具体使用
Jul 15 Python
django迁移数据库错误问题解决
Jul 29 Python
Python 实现文件读写、坐标寻址、查找替换功能
Sep 11 Python
Python selenium爬取微博数据代码实例
May 22 Python
Python常驻任务实现接收外界参数代码解析
Jul 21 Python
Matplotlib配色之Colormap详解
Jan 05 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
人族 TERRAN 概述
2020/03/14 星际争霸
重量级动漫纷纷停播!唯独OVERLORD第四季正在英魂之刃继续更新
2020/05/06 日漫
thinkphp5 URL和路由的功能详解与实例
2017/12/26 PHP
ThinkPHP框架使用redirect实现页面重定向的方法实例分析
2018/04/12 PHP
php 使用ActiveMQ发送消息,与处理消息操作示例
2020/02/23 PHP
javaScript中两个等于号和三个等于号之间的区别介绍
2014/06/27 Javascript
用JavaScript实现使用鼠标画线的示例代码
2014/08/19 Javascript
Js和JQuery获取鼠标指针坐标的实现代码分享
2015/05/25 Javascript
理解Javascript的动态语言特性
2015/06/17 Javascript
JS+CSS实现自动切换的网页滑动门菜单效果代码
2015/09/14 Javascript
JS Attribute属性操作详解
2016/05/19 Javascript
AngularJS 模块详解及简单实例
2016/07/28 Javascript
JavaScript常用正则验证函数实例小结【年龄,数字,Email,手机,URL,日期等】
2017/01/23 Javascript
Angular中$broadcast和$emit的使用方法详解
2017/05/22 Javascript
详解vue-cli本地环境API代理设置和解决跨域
2017/09/05 Javascript
在vue中通过axios异步使用echarts的方法
2018/01/13 Javascript
详解Angular中通过$location获取地址栏的参数
2018/08/02 Javascript
100行代码实现一个vue分页组功能
2018/11/06 Javascript
gulp构建小程序的方法步骤
2019/05/31 Javascript
微信小程序封装分享与分销功能过程解析
2019/08/13 Javascript
微信小程序vant弹窗组件的实现方式
2020/02/21 Javascript
vue中echarts引入中国地图的案例
2020/07/28 Javascript
python使用PyGame播放Midi和Mp3文件的方法
2015/04/24 Python
简单实现python爬虫功能
2015/12/31 Python
详解常用查找数据结构及算法(Python实现)
2016/12/09 Python
Django Rest framework之认证的实现代码
2018/12/17 Python
pytorch中的inference使用实例
2020/02/20 Python
如何使用Cython对python代码进行加密
2020/07/08 Python
高性能钓鱼服装:Huk Gear
2019/02/20 全球购物
校园餐饮创业计划书
2014/01/10 职场文书
项目合作意向书范本
2014/04/01 职场文书
企业安全生产演讲稿
2014/05/09 职场文书
2014幼儿园家长工作总结
2014/11/10 职场文书
交通事故代理词范文
2015/05/23 职场文书
如何在向量化NumPy数组上进行移动窗口
2021/05/18 Python
Opencv中cv2.floodFill算法的使用
2021/06/18 Python