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 相关文章推荐
在Django中创建动态视图的教程
Jul 15 Python
Python函数中*args和**kwargs来传递变长参数的用法
Jan 26 Python
python版本的读写锁操作方法
Apr 25 Python
Python实现删除文件中含“指定内容”的行示例
Jun 09 Python
python 爬虫 批量获取代理ip的实例代码
May 22 Python
快速解决PyCharm无法引用matplotlib的问题
May 24 Python
Python爬虫实战之12306抢票开源
Jan 24 Python
Python2比较当前图片跟图库哪个图片相似的方法示例
Sep 28 Python
Python变量作用域LEGB用法解析
Feb 04 Python
Python3如何在服务器打印资产信息
Aug 27 Python
Python tkinter之Bind(绑定事件)的使用示例
Feb 05 Python
Flask response响应的具体使用
Jul 15 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作的文本留言本的例子(二)
2006/10/09 PHP
PHP 简单数组排序实现代码
2009/08/05 PHP
CI框架入门示例之数据库取数据完整实现方法
2014/11/05 PHP
php微信支付接口开发程序
2016/08/02 PHP
Javascript 变量作用域 两个可能会被忽略的小特性
2010/03/23 Javascript
(跨浏览器基础事件/浏览器检测/判断浏览器)经验代码分享
2013/01/24 Javascript
JS与C#编码解码
2013/12/03 Javascript
node.js中的console.trace方法使用说明
2014/12/09 Javascript
node.js中的fs.writeFileSync方法使用说明
2014/12/14 Javascript
JavaScript基于setTimeout实现计数的方法
2015/05/08 Javascript
基于jquery fly插件实现加入购物车抛物线动画效果
2016/04/05 Javascript
快速实现jQuery多级菜单效果
2017/02/01 Javascript
vue监听滚动事件实现滚动监听
2017/04/11 Javascript
js实现input密码框显示/隐藏功能
2020/09/10 Javascript
基于Proxy的小程序状态管理实现
2019/06/14 Javascript
javascript网页随机点名实现过程解析
2019/10/15 Javascript
解决vue项目中页面调用数据 在数据加载完毕之前出现undefined问题
2019/11/14 Javascript
[08:54]《一刀刀一天》之DOTA全时刻18:十九支奔赴西雅图队伍全部出炉
2014/06/04 DOTA
Python遍历目录的4种方法实例介绍
2015/04/13 Python
Python实现扫描局域网活动ip(扫描在线电脑)
2015/04/28 Python
Python实现1-9数组形成的结果为100的所有运算式的示例
2017/11/03 Python
python负载均衡的简单实现方法
2018/02/04 Python
Python 使用PIL numpy 实现拼接图片的示例
2018/05/08 Python
对pandas读取中文unicode的csv和添加行标题的方法详解
2018/12/12 Python
详解python中的hashlib模块的使用
2019/04/22 Python
Python + OpenCV 实现LBP特征提取的示例代码
2019/07/11 Python
美国演唱会订票网站:Ticketmaster美国
2017/10/05 全球购物
院药学专业个人求职信
2013/09/21 职场文书
金融专业毕业生推荐信
2013/11/26 职场文书
幼教简历自我评价
2014/01/28 职场文书
新员工入职感言
2014/02/01 职场文书
设计师求职信模板
2014/05/06 职场文书
沙滩主题婚礼活动策划方案
2014/09/15 职场文书
黄河绝恋观后感
2015/06/08 职场文书
Nginx + consul + upsync 完成动态负载均衡的方法详解
2021/03/31 Servers
vue响应式原理与双向数据的深入解析
2021/06/04 Vue.js