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中使用urllib2获取http请求状态码的代码例子
Jul 07 Python
Python多线程编程(八):使用Event实现线程间通信
Apr 05 Python
Python Requests 基础入门
Apr 07 Python
python 简单备份文件脚本v1.0的实例
Nov 06 Python
Python操作mongodb的9个步骤
Jun 04 Python
BP神经网络原理及Python实现代码
Dec 18 Python
PyQt5实现从主窗口打开子窗口的方法
Jun 19 Python
Python 分发包中添加额外文件的方法
Aug 16 Python
40行Python代码实现天气预报和每日鸡汤推送功能
Feb 27 Python
python 实现Harris角点检测算法
Dec 11 Python
python中remove函数的踩坑记录
Jan 04 Python
Python爬虫 简单介绍一下Xpath及使用
Apr 26 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
yii2超好用的日期组件和时间组件
2016/05/05 PHP
ThinkPHP 3.2.2实现事务操作的方法
2017/05/05 PHP
PHP使用mysqli同时执行多条sql查询语句的实例
2019/03/22 PHP
PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC
2020/02/16 PHP
详解使用php-cs-fixer格式化代码
2020/09/16 PHP
图片onload事件触发问题解决方法
2011/07/31 Javascript
jQuery弹出层始终垂直居中相对于屏幕或当前窗口
2013/04/01 Javascript
jQuery实现点击后标记当前菜单位置(背景高亮菜单)效果
2015/08/22 Javascript
jquery zTree异步加载简单实例讲解
2016/02/25 Javascript
js字符串截取函数slice、substring和substr的比较
2016/05/17 Javascript
jQuery获取radio选中项的值实例
2016/06/18 Javascript
xmlplus组件设计系列之网格(DataGrid)(10)
2017/05/05 Javascript
Vue 路由 过渡动效 数据获取方法
2018/07/31 Javascript
跨域解决之JSONP和CORS的详细介绍
2018/11/21 Javascript
小程序的上传文件接口的注意要点解析
2019/09/17 Javascript
小程序登录之支付宝授权的实现示例
2019/12/13 Javascript
[03:22]DSPL第一期精彩集锦:酷炫到底!
2014/11/07 DOTA
python求pi的方法
2014/10/08 Python
基于hashlib模块--加密(详解)
2017/06/21 Python
python docx 中文字体设置的操作方法
2018/05/08 Python
Python基于SMTP协议实现发送邮件功能详解
2018/08/14 Python
python ImageDraw类实现几何图形的绘制与文字的绘制
2020/02/26 Python
10个python3常用排序算法详细说明与实例(快速排序,冒泡排序,桶排序,基数排序,堆排序,希尔排序,归并排序,计数排序)
2020/03/17 Python
浅谈python量化 双均线策略(金叉死叉)
2020/06/03 Python
python实现在线翻译
2020/06/18 Python
MCM英国官网:奢侈皮具制品
2017/04/18 全球购物
丝绸和人造花卉、植物和树木:Nearly Natural
2018/11/28 全球购物
TUMI新加坡官网:国际领先的商旅箱包品牌
2019/01/12 全球购物
北京泡泡网网络有限公司.net面试题
2012/07/17 面试题
北京某科技有限公司C# .net笔试题
2014/09/27 面试题
《搭石》教学反思
2014/04/07 职场文书
护士感人事迹
2014/05/01 职场文书
学生手册评语
2014/05/05 职场文书
CSS3 制作的彩虹按钮样式
2021/04/11 HTML / CSS
Python爬虫框架之Scrapy中Spider的用法
2021/06/28 Python
分位数回归模型quantile regeression应用详解及示例教程
2021/11/02 Python