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 MySQLdb Windows下安装教程及问题解决方法
May 09 Python
Python的Flask框架的简介和安装方法
Nov 13 Python
Python的Tornado框架的异步任务与AsyncHTTPClient
Jun 27 Python
Python实现霍夫圆和椭圆变换代码详解
Jan 12 Python
Python实现可自定义大小的截屏功能
Jan 20 Python
Python实现检测文件MD5值的方法示例
Apr 11 Python
Python并发:多线程与多进程的详解
Jan 24 Python
基于wxPython的GUI实现输入对话框(2)
Feb 27 Python
python画蝴蝶曲线图的实例
Nov 21 Python
Python 爬虫性能相关总结
Aug 03 Python
在Python中实现字典反转案例
Dec 05 Python
深度学习详解之初试机器学习
Apr 14 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生成静态文件的多种方法分享
2012/07/17 PHP
PHP笛卡尔积实现算法示例
2018/07/30 PHP
php/JS实现的生成随机密码(验证码)功能示例
2019/06/06 PHP
Laravel6.0.4中将添加计划任务事件的方法步骤
2019/10/15 PHP
jQuery学习笔记之jQuery的DOM操作
2010/12/22 Javascript
jQuery 过滤not()与filter()实例代码
2012/05/10 Javascript
js 调用本地exe的例子(支持IE内核的浏览器)
2012/12/26 Javascript
JavaScript实现当网页加载完成后执行指定函数的方法
2015/03/21 Javascript
javascript中mouseover、mouseout使用详解
2015/07/19 Javascript
Window.Open打开窗体和if嵌套代码
2016/04/15 Javascript
JavaScript中的this引用(推荐)
2016/08/05 Javascript
基于vue+ bootstrap实现图片上传图片展示功能
2017/05/17 Javascript
vue左右侧联动滚动的实现代码
2018/06/06 Javascript
[47:43]Alliance vs KG 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
Python中非常实用的一些功能和函数分享
2015/02/14 Python
pandas 使用apply同时处理两列数据的方法
2018/04/20 Python
Python下使用Scrapy爬取网页内容的实例
2018/05/21 Python
使用python对excle和json互相转换的示例
2018/10/23 Python
python numpy中cumsum的用法详解
2019/10/17 Python
Python 词典(Dict) 加载与保存示例
2019/12/06 Python
Python如何基于selenium实现自动登录博客园
2019/12/16 Python
Python基于内置库pytesseract实现图片验证码识别功能
2020/02/24 Python
Python3自动生成MySQL数据字典的markdown文本的实现
2020/05/07 Python
python多线程semaphore实现线程数控制的示例
2020/08/10 Python
HTML5 在canvas中绘制文本附效果图
2014/06/23 HTML / CSS
html5中canvas图表实现柱状图的示例
2017/11/13 HTML / CSS
挪威太阳镜和眼镜网上商城:SmartBuyGlasses挪威
2016/08/20 全球购物
Weblogic和WebSphere不同特点
2012/05/09 面试题
2013年研究生毕业感言
2014/02/06 职场文书
空中乘务员岗位职责
2014/03/08 职场文书
书法大赛策划方案
2014/06/04 职场文书
孩子教育的心得体会
2014/09/01 职场文书
个人反四风对照检查材料思想汇报
2014/09/23 职场文书
Nginx解决前端访问资源跨域问题的方法详解
2021/03/31 Servers
如何有效防止sql注入的方法
2021/05/25 SQL Server