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入门_浅谈for循环、while循环
May 16 Python
Django中日期处理注意事项与自定义时间格式转换详解
Aug 06 Python
Python3 利用requests 库进行post携带账号密码请求数据的方法
Oct 26 Python
Python3.4学习笔记之常用操作符,条件分支和循环用法示例
Mar 01 Python
python中比较两个列表的实例方法
Jul 04 Python
Pycharm简单使用教程(入门小结)
Jul 04 Python
详解使用python绘制混淆矩阵(confusion_matrix)
Jul 14 Python
Python多叉树的构造及取出节点数据(treelib)的方法
Aug 09 Python
Python代理IP爬虫的新手使用教程
Sep 05 Python
Python第三方库的几种安装方式(小结)
Apr 03 Python
将tf.batch_matmul替换成tf.matmul的实现
Jun 18 Python
Python列表删除重复元素与图像相似度判断及删除实例代码
May 07 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+jquery编码方面的一些心得(utf-8 gb2312)
2010/10/12 PHP
从PHP的源码中深入了解stdClass类
2014/04/18 PHP
用javascript做拖动布局的思路
2008/05/31 Javascript
jquery 经典动画菜单效果代码
2010/01/26 Javascript
使用PHP+JQuery+Ajax分页的实现
2013/04/23 Javascript
jquery获得keycode的示例代码
2013/12/30 Javascript
js 设置缓存及获取设置的缓存
2014/05/08 Javascript
Javascript验证方法大全
2015/09/21 Javascript
javascript实现拖动元素交换位置
2015/11/29 Javascript
js实现滚动条滚动到页面底部继续加载
2015/12/19 Javascript
详解Bootstrap glyphicons字体图标
2016/01/04 Javascript
jQuery控制文本框只能输入数字和字母及使用方法
2016/05/26 Javascript
jquery拼接ajax 的json和字符串拼接的方法
2017/03/11 Javascript
bootstrap table表格使用方法详解
2017/04/26 Javascript
在vue中通过axios异步使用echarts的方法
2018/01/13 Javascript
微信小程序云开发修改云数据库中的数据方法
2019/05/18 Javascript
uni-app实现点赞评论功能
2019/11/25 Javascript
python实现汉诺塔方法汇总
2016/07/25 Python
Python排序搜索基本算法之选择排序实例分析
2017/12/09 Python
Python绘制KS曲线的实现方法
2018/08/13 Python
Python循环中else,break和continue的用法实例详解
2019/07/11 Python
python根据多个文件名批量查找文件
2019/08/13 Python
Django app配置多个数据库代码实例
2019/12/17 Python
在python中使用pyspark读写Hive数据操作
2020/06/06 Python
将tf.batch_matmul替换成tf.matmul的实现
2020/06/18 Python
python实现模拟器爬取抖音评论数据的示例代码
2021/01/06 Python
解析HTML5中的新功能本地存储localStorage
2016/03/01 HTML / CSS
希尔顿酒店中国网站:Hilton中国
2017/03/11 全球购物
美国殿堂级滑板、冲浪、滑雪服装品牌:Volcom(钻石)
2017/04/20 全球购物
高级护理专业大学生求职信
2013/10/24 职场文书
企业演讲稿范文大全
2014/05/20 职场文书
婚内房产协议书范本
2014/10/02 职场文书
党员检讨书
2014/10/13 职场文书
项目负责人岗位职责
2015/02/15 职场文书
决心书格式及范文
2019/06/24 职场文书
深度学习小工程练习之垃圾分类详解
2021/04/14 Python