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读取网页内容的方法
Jul 30 Python
深入学习python的yield和generator
Mar 10 Python
python2.7到3.x迁移指南
Feb 01 Python
python numpy 显示图像阵列的实例
Jul 02 Python
Python3利用print输出带颜色的彩色字体示例代码
Apr 08 Python
解决pycharm remote deployment 配置的问题
Jun 27 Python
python 6.7 编写printTable()函数表格打印(完整代码)
Mar 25 Python
python使用QQ邮箱实现自动发送邮件
Jun 22 Python
keras的backend 设置 tensorflow,theano操作
Jun 30 Python
python实现图像外边界跟踪操作
Jul 13 Python
django中cookiecutter的使用教程
Dec 03 Python
如何用python绘制雷达图
Apr 24 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
PHP4之COOKIE支持详解
2006/10/09 PHP
Linux操作系统安装LAMP环境
2015/06/26 PHP
纯PHP代码实现支付宝批量付款
2015/12/24 PHP
PHP学习笔记之php文件操作
2016/06/03 PHP
Yii+MYSQL锁表防止并发情况下重复数据的方法
2016/07/14 PHP
php两点地理坐标距离的计算方法
2018/12/29 PHP
laravel 操作数据库常用函数的返回值方法
2019/10/11 PHP
超级酷和最实用的jQuery实例收集(20个)
2010/04/21 Javascript
jquery多行滚动/向左或向上滚动/响应鼠标实现思路及代码
2013/01/23 Javascript
AngularJS 单选框及多选框的双向动态绑定
2017/04/20 Javascript
js实现可以点击收缩或张开的悬浮窗
2017/09/18 Javascript
基于vue.js快速搭建图书管理平台
2017/10/29 Javascript
微信小程序实现单选选项卡切换效果
2020/06/19 Javascript
JavaScript canvas实现跟随鼠标事件
2020/02/10 Javascript
详解基于element的区间选择组件校验(交易金额)
2021/01/07 Javascript
[00:37]2016完美“圣”典风云人物:AMS宣传片
2016/12/06 DOTA
[46:38]完美世界DOTA2联赛PWL S2 Magma vs PXG 第三场 11.28
2020/12/02 DOTA
从零学python系列之数据处理编程实例(二)
2014/05/22 Python
Python中操作MySQL入门实例
2015/02/08 Python
python中解析json格式文件的方法示例
2017/05/03 Python
Python 实现淘宝秒杀的示例代码
2018/01/02 Python
python OpenCV学习笔记直方图反向投影的实现
2018/02/07 Python
在python中利用opencv简单做图片比对的方法
2019/01/24 Python
TensorFlow设置日志级别的几种方式小结
2020/02/04 Python
使用HTML5 Canvas绘制圆角矩形及相关的一些应用举例
2016/03/22 HTML / CSS
德国专业木制品经销商:Holz-Direkt24
2019/12/26 全球购物
高二生物教学反思
2014/01/27 职场文书
秘书英文求职信范文
2014/01/31 职场文书
地理教师岗位职责
2014/03/16 职场文书
安全教育月活动总结
2014/05/05 职场文书
工伤事故赔偿协议书范文
2014/09/24 职场文书
机票销售员态度不好检讨书
2014/09/27 职场文书
2014年高二班主任工作总结
2014/12/16 职场文书
婚宴新娘致辞
2015/07/28 职场文书
Python列表的索引与切片
2022/04/07 Python
Android Studio 计算器开发
2022/05/20 Java/Android