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网络编程学习笔记(八):XML生成与解析(DOM、ElementTree)
Jun 09 Python
在Python的web框架中配置app的教程
Apr 30 Python
使用Python绘制图表大全总结
Feb 11 Python
python不换行之end=与逗号的意思及用途
Nov 21 Python
selenium + python 获取table数据的示例讲解
Oct 13 Python
Pandas库之DataFrame使用的学习笔记
Jun 21 Python
python执行scp命令拷贝文件及文件夹到远程主机的目录方法
Jul 08 Python
python实现两个一维列表合并成一个二维列表
Dec 02 Python
Python实现中值滤波去噪方式
Dec 18 Python
构建高效的python requests长连接池详解
May 02 Python
Django之全局使用request.user.username的实例详解
May 14 Python
python必学知识之文件操作(建议收藏)
May 30 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生成PDF方法详解
2015/01/23 PHP
php统计数组元素个数的方法
2015/07/02 PHP
一个简单安全的PHP验证码类、PHP验证码
2016/09/24 PHP
php array_reverse 以相反的顺序返回数组实例代码
2017/04/11 PHP
PHP模糊查询技术实例分析【附源码下载】
2019/03/07 PHP
Laravel框架中缓存的使用方法分析
2019/09/06 PHP
PHP使用PDO实现mysql防注入功能详解
2019/12/20 PHP
javascript this用法小结
2008/12/19 Javascript
JQuery 学习笔记 选择器之六
2009/07/23 Javascript
详解AngularJS控制器的使用
2016/03/09 Javascript
vue 通过下拉框组件学习vue中的父子通讯
2017/12/19 Javascript
vue 动态修改a标签的样式的方法
2018/01/18 Javascript
解决vue项目打包后提示图片文件路径错误的问题
2018/07/04 Javascript
浅谈VueJS SSR 后端绘制内存泄漏的相关解决经验
2018/12/20 Javascript
vue添加class样式实例讲解
2019/02/12 Javascript
TypeScript开发Node.js程序的方法
2019/04/30 Javascript
Vue+element 解决浏览器自动填充记住的账号密码问题
2019/06/11 Javascript
python如何爬取个性签名
2018/06/19 Python
Python中remove漏删和索引越界问题的解决
2020/03/18 Python
Python Pandas list列表数据列拆分成多行的方法实现
2020/12/14 Python
HTML5的结构和语义(1):前言
2008/10/17 HTML / CSS
网购亚洲时装、美容产品和生活百货:YesStyle
2016/09/15 全球购物
HEMA英国:荷兰原创设计
2018/08/28 全球购物
Cult Gaia官网:美国生活方式品牌
2019/08/16 全球购物
C/C++程序员常见面试题一
2012/12/08 面试题
自考生毕业自我鉴定
2013/10/10 职场文书
大学生实习自我鉴定
2013/12/11 职场文书
成龙霸王洗发水广告词
2014/03/14 职场文书
超市中秋节促销方案
2014/03/21 职场文书
2015年基层党组织公开承诺书
2015/01/21 职场文书
圆明园纪录片观后感
2015/06/03 职场文书
教师节大会主持词
2015/07/06 职场文书
MySQL 重写查询语句的三种策略
2021/05/10 MySQL
Windows 11要来了?微软文档揭示Win11太阳谷 / Win10有两个不同版本
2021/11/21 数码科技
java开发双人五子棋游戏
2022/05/06 Java/Android
Beekeeper Studio开源数据库管理工具比Navicat更炫酷
2022/06/21 数据库