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?
Oct 07 Python
python socket 超时设置 errno 10054
Jul 01 Python
Python读取图片EXIF信息类库介绍和使用实例
Jul 10 Python
Python实现针对中文排序的方法
May 09 Python
Python线性回归实战分析
Feb 01 Python
用python 批量更改图像尺寸到统一大小的方法
Mar 31 Python
python按行读取文件,去掉每行的换行符\n的实例
Apr 19 Python
python验证码识别教程之利用投影法、连通域法分割图片
Jun 04 Python
通过Pandas读取大文件的实例
Jun 07 Python
python 命名规范知识点汇总
Feb 14 Python
OpenCV 之按位运算举例解析
Jun 19 Python
pytorch Dataset,DataLoader产生自定义的训练数据案例
Mar 03 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
PHPMailer邮件发送的实现代码
2013/05/04 PHP
PHP获取音频文件的相关信息
2015/06/22 PHP
LINUX下PHP程序实现WORD文件转化为PDF文件的方法
2016/05/13 PHP
PHP文件上传操作实例详解
2016/09/27 PHP
php使用高斯算法实现图片的模糊处理功能示例
2016/11/11 PHP
PHP bin2hex()函数基础实例讲解
2019/02/11 PHP
event.srcElement+表格应用
2006/08/29 Javascript
prototype与jquery下Ajax实现的差别
2009/09/13 Javascript
使用jQuery模板来展现json数据的代码
2010/10/22 Javascript
js实现表格字段排序
2014/02/19 Javascript
解决checkbox的attr(checked)一直为undefined问题
2014/06/16 Javascript
JS获取随机数和时间转换的简单实例
2016/07/10 Javascript
微信小程序 获取微信OpenId详解及实例代码
2016/10/31 Javascript
快速实现JS图片懒加载(可视区域加载)示例代码
2017/01/04 Javascript
解决angularJS中input标签的ng-change事件无效问题
2018/09/13 Javascript
Python类的动态修改的实例方法
2017/03/24 Python
python中的break、continue、exit()、pass全面解析
2017/08/05 Python
使用Python和xlwt向Excel文件中写入中文的实例
2018/04/21 Python
python 拷贝特定后缀名文件,并保留原始目录结构的实例
2018/04/27 Python
python3+django2开发一个简单的人员管理系统过程详解
2019/07/23 Python
python求质数列表的例子
2019/11/24 Python
python raise的基本使用
2020/09/10 Python
基于python的opencv图像处理实现对斑马线的检测示例
2020/11/29 Python
html5 input元素新特性_动力节点Java学院整理
2017/07/06 HTML / CSS
移动端html5判断是否滚动到底部并且下拉加载
2019/11/19 HTML / CSS
关于解决iframe标签嵌套问题的解决方法
2020/03/04 HTML / CSS
澳大利亚的奢侈品牌:Oroton
2016/08/26 全球购物
一些PHP的面试题
2015/05/06 面试题
大学生职业生涯规划书模版
2013/12/30 职场文书
化妆品促销方案
2014/02/24 职场文书
幼儿园春季开学寄语
2014/04/03 职场文书
消防安全责任书范本
2014/04/15 职场文书
2015年度员工自我评价范文
2015/03/11 职场文书
经费申请报告
2015/05/15 职场文书
python爬取某网站原图作为壁纸
2021/06/02 Python
Win11怎么把合并的任务栏分开 Win11任务栏合并分开教程
2022/04/06 数码科技