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标准库之多进程(multiprocessing包)介绍
Nov 25 Python
python监控网站运行异常并发送邮件的方法
Mar 13 Python
深入理解Python中装饰器的用法
Jun 28 Python
Python调用C语言的方法【基于ctypes模块】
Jan 22 Python
python统计多维数组的行数和列数实例
Jun 23 Python
python生成1行四列全2矩阵的方法
Aug 04 Python
python3实现指定目录下文件sha256及文件大小统计
Feb 25 Python
Python PO设计模式的具体使用
Aug 16 Python
带你学习Python如何实现回归树模型
Jul 16 Python
基于python实现简单网页服务器代码实例
Sep 14 Python
使用Python提取文本中含有特定字符串的方法示例
Dec 09 Python
Pytorch 如何实现LSTM时间序列预测
May 17 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根据传入参数合并多个JS和CSS文件的简单实现
2014/06/13 PHP
php实现用于计算执行时间的类实例
2015/04/18 PHP
PHP对象、模式与实践之高级特性分析
2016/12/08 PHP
php实现统计二进制中1的个数算法示例
2018/01/23 PHP
PHP实现计算器小功能
2020/08/28 PHP
JavaScript OOP类与继承
2009/11/15 Javascript
js检验密码强度(低中高)附图
2014/06/05 Javascript
JavaScript制作简易的微信打飞机
2015/03/31 Javascript
浅谈jQuery页面的滚动位置scrollTop、scrollLeft
2015/05/19 Javascript
JQUERY的AJAX请求缓存里的数据问题处理
2016/02/23 Javascript
Sort()函数的多种用法
2016/03/20 Javascript
jquery遍历标签中自定义的属性方法
2016/09/17 Javascript
jQuery.cookie.js使用方法及相关参数解释
2017/03/06 Javascript
js判断是否是手机页面
2017/03/17 Javascript
iscroll实现下拉刷新功能
2017/07/18 Javascript
关于Stream和Buffer的相互转换详解
2017/07/26 Javascript
使用wxapp-img-loader自定义组件实现微信小程序图片预加载功能
2018/10/18 Javascript
JavaScript"模拟事件"的注意要点详解
2019/02/13 Javascript
深入理解react 组件类型及使用场景
2019/03/07 Javascript
vue element upload组件 file-list的动态绑定实现
2019/10/11 Javascript
javaScript把其它类型转换为Number类型
2019/10/13 Javascript
[01:08:44]NB vs VP 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python实现方便使用的级联进度信息实例
2015/05/05 Python
Python代码实现KNN算法
2017/12/20 Python
Python Web程序部署到Ubuntu服务器上的方法
2018/02/22 Python
python脚本监控Tomcat服务器的方法
2018/07/06 Python
Pandas实现dataframe和np.array的相互转换
2019/11/30 Python
python中rb含义理解
2020/06/18 Python
python数据抓取3种方法总结
2021/02/07 Python
详解python第三方库的安装、PyInstaller库、random库
2021/03/03 Python
图书室管理制度
2014/01/19 职场文书
2014年机关植树节活动方案
2014/02/27 职场文书
大学自主招生推荐信
2014/05/10 职场文书
2014年医院十一国庆节活动方案
2014/09/15 职场文书
心理学培训心得体会
2016/01/22 职场文书
关于MySQL临时表为什么可以重名的问题
2022/03/22 MySQL