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搭建Django应用程序步骤及版本冲突问题解决
Nov 19 Python
python自动化测试之连接几组测试包实例
Sep 28 Python
python通过pip更新所有已安装的包实现方法
May 19 Python
Python图像处理实现两幅图像合成一幅图像的方法【测试可用】
Jan 04 Python
使用Python做垃圾分类的原理及实例代码附源码
Jul 02 Python
详解Python利用random生成一个列表内的随机数
Aug 21 Python
Python中的上下文管理器相关知识详解
Sep 19 Python
使用python写一个自动浏览文章的脚本实例
Dec 05 Python
pytorch 归一化与反归一化实例
Dec 31 Python
python实现单目标、多目标、多尺度、自定义特征的KCF跟踪算法(实例代码)
Jan 08 Python
pytorch 利用lstm做mnist手写数字识别分类的实例
Jan 10 Python
从训练好的tensorflow模型中打印训练变量实例
Jan 20 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/10/08 PHP
数据库查询记录php 多行多列显示
2009/08/15 PHP
PHP中实现汉字转区位码应用源码实例解析
2010/06/14 PHP
PHP下通过QRCode类库创建中间带网站LOGO的二维码
2014/07/12 PHP
Cygwin中安装PHP方法步骤
2015/07/04 PHP
PHP异常处理Exception类
2015/12/11 PHP
PHP实现文件上传与下载
2020/08/28 PHP
代码生成器 document.write()
2007/04/15 Javascript
Tinymce+jQuery.Validation使用产生的BUG
2010/03/29 Javascript
JavaScript全排列的六种算法 具体实现
2013/06/29 Javascript
jQuery :first选择器使用介绍
2013/08/09 Javascript
JS替换文本域内的回车示例
2014/02/18 Javascript
一个简单不报错的summernote 图片上传案例
2016/07/11 Javascript
jQGrid动态填充select下拉框的选项值(动态填充)
2016/11/28 Javascript
vue element-ui之怎么封装一个自己的组件的详解
2019/05/20 Javascript
Preload基础使用方法详解
2020/02/03 Javascript
JavaScript 生成唯一ID的几种方式
2021/02/19 Javascript
python列表操作使用示例分享
2014/02/21 Python
使用Python脚本对Linux服务器进行监控的教程
2015/04/02 Python
Python文件处理
2016/02/29 Python
Django读取Mysql数据并显示在前端的实例
2018/05/27 Python
python 读取竖线分隔符的文本方法
2018/12/20 Python
Python tcp传输代码实例解析
2020/03/18 Python
美国孩之宝玩具官网:Hasbro Pulse
2019/06/24 全球购物
西班牙鞋子和箱包在线销售网站:zapatos.es
2020/02/17 全球购物
3个CCIE对一个工程师的面试题
2012/05/06 面试题
韩国商务邀请函
2014/01/14 职场文书
2014两会优秀的心得体会范文
2014/03/17 职场文书
《第一朵杏花》教学反思
2014/04/16 职场文书
白酒营销策划方案
2014/08/17 职场文书
简易版租房协议书范本
2014/10/13 职场文书
党员批评与自我批评发言材料
2014/10/14 职场文书
《全神贯注》教学反思
2016/02/22 职场文书
祝福语集锦:送给闺蜜的生日祝福语
2019/10/08 职场文书
读《方与圆》有感:交友方圆有度
2020/01/14 职场文书
Python实现学生管理系统并生成exe可执行文件详解流程
2022/01/22 Python