Python二叉搜索树与双向链表转换实现方法


Posted in Python onApril 29, 2016

本文实例讲述了Python二叉搜索树与双向链表实现方法。分享给大家供大家参考,具体如下:

# encoding=utf8
'''
题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。
要求不能创建任何新的结点,只能调整树中结点指针的指向。
'''
class BinaryTreeNode():
  def __init__(self, value, left = None, right = None):
    self.value = value
    self.left = left
    self.right = right
def create_a_tree():
  node_4 = BinaryTreeNode(4)
  node_8 = BinaryTreeNode(8)
  node_6 = BinaryTreeNode(6, node_4, node_8)
  node_12 = BinaryTreeNode(12)
  node_16 = BinaryTreeNode(16)
  node_14 = BinaryTreeNode(14, node_12, node_16)
  node_10 = BinaryTreeNode(10, node_6, node_14)
  return node_10
def print_a_tree(root):
  if root is None:return
  print_a_tree(root.left)
  print root.value, ' ',
  print_a_tree(root.right)
def print_a_linked_list(head):
  print 'linked_list:'
  while head is not None:
    print head.value, ' ',
    head = head.right
  print ''
def create_linked_list(root):
  '''构造树的双向链表,返回这个双向链表的最左结点和最右结点的指针'''
  if root is None:
    return (None, None)
  # 递归构造出左子树的双向链表
  (l_1, r_1) = create_linked_list(root.left)
  left_most = l_1 if l_1 is not None else root
  (l_2, r_2) = create_linked_list(root.right)
  right_most = r_2 if r_2 is not None else root
  # 将整理好的左右子树和root连接起来
  root.left = r_1
  if r_1 is not None:r_1.right = root
  root.right = l_2
  if l_2 is not None:l_2.left = root
  # 由于是双向链表,返回给上层最左边的结点和最右边的结点指针
  return (left_most, right_most)
if __name__ == '__main__':
  tree_1 = create_a_tree()
  print_a_tree(tree_1)
  (left_most, right_most) = create_linked_list(tree_1)
  print_a_linked_list(left_most)
  pass

更多关于Python相关内容可查看本站专题:《Python正则表达式用法总结》、《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python绑定方法与非绑定方法详解
Aug 18 Python
Python面向对象编程基础解析(一)
Oct 26 Python
python编程实现随机生成多个椭圆实例代码
Jan 03 Python
Tesserocr库的正确安装方式
Oct 19 Python
Python实现将Excel转换成为image的方法
Oct 23 Python
python opencv minAreaRect 生成最小外接矩形的方法
Jul 01 Python
python 图像处理画一个正弦函数代码实例
Sep 10 Python
3行Python代码实现图像照片抠图和换底色的方法
Oct 10 Python
python时间与Unix时间戳相互转换方法详解
Feb 13 Python
利用python实现逐步回归
Feb 24 Python
anaconda3安装及jupyter环境配置全教程
Aug 24 Python
Python基于Tkinter开发一个爬取B站直播弹幕的工具
May 06 Python
Python实现简单字典树的方法
Apr 29 #Python
Python中操作符重载用法分析
Apr 29 #Python
Python中绑定与未绑定的类方法用法分析
Apr 29 #Python
Python过滤列表用法实例分析
Apr 29 #Python
Python松散正则表达式用法分析
Apr 29 #Python
python中私有函数调用方法解密
Apr 29 #Python
简单学习Python time模块
Apr 29 #Python
You might like
在DC的漫画和电影中,蝙蝠侠的宿敌,小丑的真名是什么?
2020/04/09 欧美动漫
php和js交互一例-PHP教程,PHP应用
2007/01/03 PHP
PHP 错误之引号中使用变量
2009/05/04 PHP
关于crontab的使用详解
2013/06/24 PHP
php使用ZipArchive提示Fatal error: Class ZipArchive not found in的解决方法
2014/11/04 PHP
PHP答题类应用接口实例
2015/02/09 PHP
php中JSON的使用方法
2015/04/30 PHP
PHP使用pear自带的mail类库发邮件的方法
2015/07/08 PHP
PHP将数据导出Excel表中的实例(投机型)
2017/07/31 PHP
JavaScript中的View-Model使用介绍
2011/08/11 Javascript
jquery 插件学习(五)
2012/08/06 Javascript
javascript不可用的问题探究
2013/10/01 Javascript
jquery实现弹出层遮罩效果的简单实例
2014/03/03 Javascript
前端必备神器 Snap.svg 弹动效果
2014/11/10 Javascript
深入浅析JSON.parse()、JSON.stringify()和eval()的作用详解
2016/04/03 Javascript
layer弹出层扩展主题的方法
2019/09/11 Javascript
微信小程序背景音乐开发详解
2019/12/12 Javascript
原生js实现购物车
2020/09/23 Javascript
WebStorm中如何将自己的代码上传到github示例详解
2020/10/28 Javascript
Python urllib模块urlopen()与urlretrieve()详解
2013/11/01 Python
跟老齐学Python之复习if语句
2014/10/02 Python
Python实现的批量下载RFC文档
2015/03/10 Python
Python中的异常处理相关语句基础学习笔记
2016/07/11 Python
python目录与文件名操作例子
2016/08/28 Python
浅谈django中的认证与登录
2016/10/31 Python
分享一下Python数据分析常用的8款工具
2018/04/29 Python
Python基于SMTP协议实现发送邮件功能详解
2018/08/14 Python
Python如何爬取实时变化的WebSocket数据的方法
2019/03/09 Python
Python更改pip镜像源的方法示例
2020/12/01 Python
瑞士网球商店:Tennis-Point
2020/03/12 全球购物
俄罗斯三星品牌商店:Samsungstore
2020/04/05 全球购物
水利专业大学生职业生涯规划书范文
2014/09/17 职场文书
《棉鞋里的阳光》教学反思
2016/02/20 职场文书
一篇合格的广告文案,其主要目的是什么?
2019/07/12 职场文书
Nginx配置https的实现
2021/11/27 Servers
如何用H5实现好玩的2048小游戏
2022/07/23 HTML / CSS