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编写分析Python程序性能的工具的教程
Apr 01 Python
python字符串string的内置方法实例详解
May 14 Python
对Python3 序列解包详解
Feb 16 Python
python实现定时压缩指定文件夹发送邮件
Dec 22 Python
使用django的ORM框架按月统计近一年内的数据方法
Jul 18 Python
Django 全局的static和templates的使用详解
Jul 19 Python
Django 在iframe里跳转顶层url的例子
Aug 21 Python
django商品分类及商品数据建模实例详解
Jan 03 Python
Python+Appium实现自动化测试的使用步骤
Mar 24 Python
Python尾递归优化实现代码及原理详解
Oct 09 Python
Pytorch如何切换 cpu和gpu的使用详解
Mar 01 Python
Python实战之疫苗研发情况可视化
May 18 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
PHP中路径问题的解决方案
2006/10/09 PHP
用windows下编译过的eAccelerator for PHP 5.1.6实现php加速的使用方法
2007/09/30 PHP
使用Apache的htaccess防止图片被盗链的解决方法
2013/04/27 PHP
ThinkPHP3.1新特性之动态设置自动完成和自动验证示例
2014/06/19 PHP
php mongodb操作类 带几个简单的例子
2016/08/25 PHP
NiftyCube——轻松实现圆角边框
2007/02/20 Javascript
javascript之dhDataGrid Ver2.0.0代码
2007/07/01 Javascript
JavaScript 设计模式学习 Singleton
2009/07/27 Javascript
基于Jquery的表格隔行换色,移动换色,点击换色插件
2010/12/22 Javascript
js 金额文本框实现代码
2012/02/14 Javascript
javascript学习笔记(十四) window对象使用介绍
2012/06/20 Javascript
JavaScript中数组对象的那些自带方法介绍
2013/03/12 Javascript
jquery表单验证框架提供的身份证验证方法(示例代码)
2013/12/27 Javascript
弹出窗口并且此窗口带有半透明的遮罩层效果
2014/03/13 Javascript
javascript制作照片墙及制作过程中出现的问题
2016/04/04 Javascript
JavaScript数组push方法使用注意事项
2017/10/30 Javascript
Vue 将后台传过来的带html字段的字符串转换为 HTML
2018/03/29 Javascript
使用elementUI实现将图片上传到本地的示例
2018/09/04 Javascript
element form 校验数组每一项实例代码
2019/10/10 Javascript
解决idea开发遇到javascript动态添加html元素时中文乱码的问题
2020/09/29 Javascript
原生JS实现京东查看商品点击放大
2020/12/21 Javascript
[47:04]EG vs RNG 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
Win7 64位下python3.6.5安装配置图文教程
2020/10/27 Python
如何利用Python分析出微信朋友男女统计图
2019/01/25 Python
python中对_init_的理解及实例解析
2019/10/11 Python
使用pyshp包进行shapefile文件修改的例子
2019/12/06 Python
tensorflow 自定义损失函数示例代码
2020/02/05 Python
Python DES加密实现原理及实例解析
2020/07/17 Python
纯CSS3实现漂亮的input输入框动画样式库(Text input love)
2018/12/29 HTML / CSS
英国鞋类及配饰零售商:Kurt Geiger
2017/02/04 全球购物
利用指针变量实现队列的入队操作
2012/04/07 面试题
年度献血先进个人事迹材料
2014/02/14 职场文书
个人租房协议书
2014/04/09 职场文书
2016大学军训心得体会
2016/01/11 职场文书
JS如何使用剪贴板操作Clipboard API
2021/05/17 Javascript
tree shaking对打包体积优化及作用
2022/07/07 Java/Android