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中if __name__ == "__main__"详细解释
Oct 21 Python
Python获取指定字符前面的所有字符方法
May 02 Python
Python实现决策树C4.5算法的示例
May 30 Python
浅谈python之新式类
Aug 12 Python
Python 互换字典的键值对实例
Feb 12 Python
关于Python内存分配时的小秘密分享
Sep 05 Python
python数值基础知识浅析
Nov 19 Python
Python任务调度模块APScheduler使用
Apr 15 Python
win7上tensorflow2.2.0安装成功 引用DLL load failed时找不到指定模块 tensorflow has no attribute xxx 解决方法
May 20 Python
利用Python如何画一颗心、小人发射爱心
Feb 21 Python
Python实现简繁体转换
Jun 07 Python
Python Django获取URL中的数据详解
Nov 01 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中3种方法删除字符串中间的空格
2014/03/10 PHP
PHP数组操作――获取数组最后一个值的方法
2015/04/14 PHP
jquery里的正则表达式说明
2011/08/03 Javascript
JavaScript中“基本类型”之争小结
2013/01/03 Javascript
JS取得绝对路径的实现代码
2015/01/16 Javascript
用队列模拟jquery的动画算法实例
2015/01/20 Javascript
JavaScript日期类型的一些用法介绍
2015/03/02 Javascript
javascript实现Table间隔色以及选择高亮(和动态切换数据)的方法
2015/05/14 Javascript
javascript中加var和不加var的区别 你真的懂吗
2016/01/06 Javascript
关于JavaScript作用域你想知道的一切
2016/02/04 Javascript
JavaScript File分段上传
2016/03/10 Javascript
JS集成fckeditor及判断内容是否为空的方法
2016/05/27 Javascript
ES6 中可以提升幸福度的小功能
2018/08/06 Javascript
解决layui上传文件提示上传异常,实际文件已经上传成功的问题
2018/08/19 Javascript
javascript中toFixed()四舍五入使用方法详解
2018/09/28 Javascript
玩转Koa之核心原理分析
2018/12/29 Javascript
jQuery事件委托代码实践详解
2019/06/21 jQuery
[01:21]DOTA2周边文化主题展 神秘商店火热开售
2017/07/30 DOTA
[07:09]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant 选手采访
2021/03/11 DOTA
python轻松实现代码编码格式转换
2015/03/26 Python
Python的Flask框架应用调用Redis队列数据的方法
2016/06/06 Python
python 网络编程详解及简单实例
2017/04/25 Python
Python输入二维数组方法
2018/04/13 Python
利用Pycharm断点调试Python程序的方法
2018/11/29 Python
零基础学Python之前需要学c语言吗
2020/07/21 Python
如何解决flask修改静态资源后缓存文件不能及时更改问题
2020/08/02 Python
乌克兰移动电子产品和相关配件的在线商店:iTMag
2020/03/16 全球购物
CAT鞋加拿大官网:CAT Footwear加拿大
2020/08/05 全球购物
金融专业毕业生自荐信
2014/06/26 职场文书
2014年仓库保管员工作总结
2014/12/03 职场文书
预备党员转正材料
2014/12/19 职场文书
员工聘用合同范本
2015/09/21 职场文书
建筑工程挂靠协议书
2016/03/23 职场文书
劳动合同变更协议书范本
2019/04/18 职场文书
Idea连接MySQL数据库出现中文乱码的问题
2021/04/14 MySQL
MySQL安装后默认自带数据库的作用详解
2021/04/27 MySQL