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中给List添加元素的4种方法分享
Nov 28 Python
深入Python解释器理解Python中的字节码
Apr 01 Python
十行代码使用Python写一个USB病毒
Jun 21 Python
Python 运行.py文件和交互式运行代码的区别详解
Jul 02 Python
如何使用python操作vmware
Jul 27 Python
Django通用类视图实现忘记密码重置密码功能示例
Dec 17 Python
Python Sphinx使用实例及问题解决
Jan 17 Python
Django自定义全局403、404、500错误页面的示例代码
Mar 08 Python
Pycharm如何导入python文件及解决报错问题
May 10 Python
基于Python绘制个人足迹地图
Jun 01 Python
浅谈python opencv对图像颜色通道进行加减操作溢出
Jun 03 Python
matplotlib事件处理基础(事件绑定、事件属性)
Feb 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
德劲1103二次变频版的打磨
2021/03/02 无线电
php 静态变量的初始化
2009/11/15 PHP
php利用cookie实现访问次数统计代码
2011/05/19 PHP
PHP不用第三变量交换2个变量的值的解决方法
2013/06/02 PHP
利用PHP实现一个简单的用户登记表示例
2017/04/25 PHP
PHP+Oracle本地开发环境搭建方法详解
2019/04/01 PHP
微信支付之JSAPI公众号支付详解
2019/05/15 PHP
jquery获得下拉框值的代码
2011/08/13 Javascript
fancybox modal的完美解决(右上的X)
2012/10/30 Javascript
jquery cookie的用法总结
2013/11/18 Javascript
express的中间件bodyParser详解
2014/12/04 Javascript
JavaScript页面模板库handlebars的简单用法
2015/03/02 Javascript
jquery实现左右无缝轮播图
2020/07/31 Javascript
JS 动态判断PC和手机浏览器实现代码
2016/09/21 Javascript
Canvas 制作动态进度加载水球详解及实例代码
2016/12/09 Javascript
JS实现两周内自动登录功能
2017/03/23 Javascript
JavaScript简单实现合并两个Json对象的方法示例
2017/10/16 Javascript
js中int和string数据类型互相转化实例
2019/01/16 Javascript
Webpack 4如何动态切割JS注入文件名详解
2019/07/09 Javascript
js实现坦克移动小游戏
2019/10/28 Javascript
如何手写简易的 Vue Router
2020/10/10 Javascript
Python下的twisted框架入门指引
2015/04/15 Python
python使用matplotlib绘制柱状图教程
2017/02/08 Python
Python加载带有注释的Json文件实例
2018/05/23 Python
在python带权重的列表中随机取值的方法
2019/01/23 Python
Python Unittest原理及基本使用方法
2020/11/06 Python
让你相见恨晚的十个Python骚操作
2020/11/18 Python
Django如何继承AbstractUser扩展字段
2020/11/27 Python
Pandas中DataFrame交换列顺序的方法实现
2020/12/14 Python
详解使用双缓存解决Canvas clearRect引起的闪屏问题
2019/04/29 HTML / CSS
新闻专业推荐信范文
2013/11/20 职场文书
学校元旦晚会方案
2014/02/19 职场文书
出国留学经济担保书
2014/04/01 职场文书
购房协议书
2014/04/11 职场文书
遗嘱范文
2015/08/07 职场文书
python和anaconda的区别
2022/05/06 Python