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中的多线程编程
Apr 09 Python
在SAE上部署Python的Django框架的一些问题汇总
May 30 Python
Python 3中的yield from语法详解
Jan 18 Python
分享Python切分字符串的一个不错方法
Dec 14 Python
Python3.5基础之NumPy模块的使用图文与实例详解
Apr 24 Python
python删除文件夹下相同文件和无法打开的图片
Jul 16 Python
一篇文章弄懂Python中的可迭代对象、迭代器和生成器
Aug 12 Python
python opencv根据颜色进行目标检测的方法示例
Jan 15 Python
Python os模块常用方法和属性总结
Feb 20 Python
Python替换NumPy数组中大于某个值的所有元素实例
Jun 08 Python
推荐值得学习的12款python-web开发框架
Aug 10 Python
Keras在mnist上的CNN实践,并且自定义loss函数曲线图操作
May 25 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
smarty的保留变量问题
2008/10/23 PHP
PHP实践教程之过滤、验证、转义与密码详解
2017/07/24 PHP
Prototype中dom对象方法汇总
2008/09/17 Javascript
Jquery增加鼠标中间功能mousewheel的实例代码
2013/09/05 Javascript
多个jquery.datatable共存,checkbox全选异常的快速解决方法
2013/12/10 Javascript
JavaScript实现快速排序的方法
2015/07/31 Javascript
JavaScript 封装一个tab效果源码分享
2015/09/15 Javascript
AngularJS实现树形结构(ztree)菜单示例代码
2016/09/18 Javascript
微信小程序实战之自定义模态弹窗(8)
2017/04/18 Javascript
360doc网站不登录就无法复制内容的解决方法
2018/01/27 Javascript
element-ui upload组件多文件上传的示例代码
2018/10/17 Javascript
微信打开网址添加在浏览器中打开提示的办法
2019/05/20 Javascript
vue 实现cli3.0中使用proxy进行代理转发
2019/10/30 Javascript
基于javascript实现贪吃蛇经典小游戏
2020/04/10 Javascript
python画出三角形外接圆和内切圆的方法
2018/01/25 Python
python简单商城购物车实例代码
2018/03/15 Python
详解在Python中以绝对路径或者相对路径导入文件的方法
2019/08/30 Python
Python调用.NET库的方法步骤
2019/12/27 Python
python面向对象之类属性和类方法案例分析
2019/12/30 Python
Python逐行读取文件内容的方法总结
2020/02/14 Python
利用python绘制数据曲线图的实现
2020/04/09 Python
python 实现百度网盘非会员上传超过500个文件的方法
2021/01/07 Python
详解css3 Transition属性(平滑过渡菜单栏案例)
2017/09/05 HTML / CSS
C语言如何决定使用那种整数类型
2016/11/26 面试题
自考生自我鉴定范文
2013/10/01 职场文书
职高毕业生自我鉴定
2013/10/21 职场文书
汉语言文学职业规划
2014/02/14 职场文书
商务日语专业毕业生自荐信
2014/03/27 职场文书
岗位说明书怎么写
2014/07/30 职场文书
2014年秘书工作总结
2014/11/25 职场文书
期末复习计划
2015/01/19 职场文书
工作时间调整通知
2015/04/24 职场文书
教师见习总结范文
2015/06/23 职场文书
2015小学新教师个人工作总结
2015/10/14 职场文书
Nginx代理同域名前后端分离项目的完整步骤
2021/03/31 Servers
解决jupyter notebook图片显示模糊和保存清晰图片的操作
2021/04/24 Python