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中使用next()方法操作文件的教程
May 24 Python
Python实现多线程HTTP下载器示例
Feb 11 Python
Python 中urls.py:URL dispatcher(路由配置文件)详解
Mar 24 Python
基于hashlib模块--加密(详解)
Jun 21 Python
python3.6+django2.0开发一套学员管理系统
Mar 03 Python
Tensorflow加载预训练模型和保存模型的实例
Jul 27 Python
Python查找文件中包含中文的行方法
Dec 19 Python
python广度优先搜索得到两点间最短路径
Jan 17 Python
详解Numpy中的数组拼接、合并操作(concatenate, append, stack, hstack, vstack, r_, c_等)
May 27 Python
mac系统下Redis安装和使用步骤详解
Jul 09 Python
Python 脚本实现淘宝准点秒杀功能
Nov 13 Python
python 实现图片修复(可用于去水印)
Nov 19 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 解决utf-8和gb2312编码转换问题
2010/03/18 PHP
PHP反向代理类代码
2014/08/15 PHP
php通过curl模拟登陆DZ论坛
2015/05/11 PHP
一个简单的php MVC留言本实例代码(必看篇)
2016/09/22 PHP
window.addeventjs事件驱动函数集合addEvent等
2008/02/19 Javascript
js ondocumentready onmouseover onclick onmouseout 样式
2010/07/22 Javascript
如何阻止复制剪切和粘贴事件为了表单内容的安全
2013/05/23 Javascript
js arguments,jcallee caller用法总结
2013/11/30 Javascript
js判断图片加载完成后获取图片实际宽高的方法
2016/02/25 Javascript
jQuery实现拖拽页面元素并将其保存到cookie的方法
2016/06/12 Javascript
jquery设置css样式的多种方法(总结)
2017/02/21 Javascript
vue.js实现简单轮播图效果
2017/10/10 Javascript
判断iOS、Android以及PC端的示例代码
2018/11/15 Javascript
基于Three.js实现360度全景图片
2018/12/30 Javascript
简单谈谈javascript高级特性
2019/09/04 Javascript
给Python IDLE加上自动补全和历史功能
2014/11/30 Python
10个易被忽视但应掌握的Python基本用法
2015/04/01 Python
使用python 爬虫抓站的一些技巧总结
2018/01/10 Python
flask中过滤器的使用详解
2018/08/01 Python
Django使用paginator插件实现翻页功能的实例
2018/10/24 Python
PyQt5固定窗口大小的方法
2019/06/18 Python
Django模型修改及数据迁移实现解析
2019/08/01 Python
对django的User模型和四种扩展/重写方法小结
2019/08/17 Python
关于PyTorch 自动求导机制详解
2019/08/18 Python
解决tensorflow读取本地MNITS_data失败的原因
2020/06/22 Python
Pycharm 解决自动格式化冲突的设置操作
2021/01/15 Python
中邮全球便购:中国邮政速递物流
2017/03/04 全球购物
EJB timer的种类
2014/10/28 面试题
财务科科长岗位职责
2014/03/10 职场文书
无偿献血倡议书
2014/04/14 职场文书
讲解员培训方案
2014/05/04 职场文书
大学英语专业求职信
2014/06/21 职场文书
[有人@你]你有一封绿色倡议书,请查收!
2019/07/18 职场文书
MATLAB 全景图切割及盒图显示的实现步骤
2021/05/14 Python
Python 数据结构之十大经典排序算法一文通关
2021/10/16 Python
Java基于Dijkstra算法实现校园导游程序
2022/03/17 Java/Android