Python利用前序和中序遍历结果重建二叉树的方法


Posted in Python onApril 27, 2016

本文实例讲述了Python利用前序和中序遍历结果重建二叉树的方法。分享给大家供大家参考,具体如下:

题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。

这道题比较容易,前序遍历的结果中,第一个结点一定是根结点,然后在中序遍历的结果中查找这个根结点,根结点左边的就是左子树,根结点右边的就是右子树,递归构造出左、右子树即可。示意图如图所示:

Python利用前序和中序遍历结果重建二叉树的方法

利用前序和中序遍历的结果重建二叉树

Python代码:

# coding: utf-8
'''
题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。
假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
'''
class Node:
  def __init__(self, data, left, right):
    self.data = data
    self.left = left
    self.right = right
def construct_tree(pre_order, mid_order):
  # 忽略参数合法性判断
  if len(pre_order) == 0 :
    return None
  # 前序遍历的第一个结点一定是根结点
  root_data = pre_order[0]
  for i in range(0, len(mid_order)):
    if mid_order[i] == root_data:
      break
  # 递归构造左子树和右子树
  left = construct_tree(pre_order[1 : 1 + i], mid_order[:i])
  right = construct_tree(pre_order[1 + i:], mid_order[i+1:])
  return Node(root_data, left, right)
if __name__ == '__main__':
  pre_order = [1, 2, 4, 7, 3, 5, 6, 8]
  mid_order = [4, 7, 2, 1, 5, 3, 8, 6]
  root = construct_tree(pre_order, mid_order)
  print root.data
  print root.left.data
  print root.right.data
  print root.left.left.data
  print root.left.left.right.data
  print root.right.right.left
  print root.right.left.data

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
用python + hadoop streaming 分布式编程(一) -- 原理介绍,样例程序与本地调试
Jul 14 Python
详细介绍Python函数中的默认参数
Mar 30 Python
Python的Django框架中的URL配置与松耦合
Jul 15 Python
Python使用正则表达式抓取网页图片的方法示例
Apr 21 Python
运用TensorFlow进行简单实现线性回归、梯度下降示例
Mar 05 Python
解决python3 HTMLTestRunner测试报告中文乱码的问题
Dec 17 Python
Tensorflow分类器项目自定义数据读入的实现
Feb 05 Python
selenium+PhantomJS爬取豆瓣读书
Aug 26 Python
Python统计分析模块statistics用法示例
Sep 06 Python
Python绘制全球疫情变化地图的实例代码
Apr 20 Python
学python爬虫能做什么
Jul 29 Python
Python PIL按比例裁剪图片
May 11 Python
Python实现二维有序数组查找的方法
Apr 27 #Python
Python数组遍历的简单实现方法小结
Apr 27 #Python
Python的“二维”字典 (two-dimension dictionary)定义与实现方法
Apr 27 #Python
Python单链表简单实现代码
Apr 27 #Python
python版本的读写锁操作方法
Apr 25 #Python
Python简单实现enum功能的方法
Apr 25 #Python
Python爬虫辅助利器PyQuery模块的安装使用攻略
Apr 24 #Python
You might like
php获取域名的google收录示例
2014/03/24 PHP
PHP+Ajax检测用户名或邮件注册时是否已经存在实例教程
2014/08/23 PHP
PHP连接access数据库
2015/03/27 PHP
超强的IE背景图片闪烁(抖动)的解决办法
2007/09/09 Javascript
jqPlot jquery的页面图表绘制工具
2009/07/25 Javascript
clientX,pageX,offsetX,x,layerX,screenX,offsetLeft区别分析
2010/03/12 Javascript
js href的用法
2010/05/13 Javascript
js取得url地址参数实例
2013/02/22 Javascript
jquery可见性过滤选择器使用示例
2013/06/24 Javascript
uploadify在Firefox下丢失session问题的解决方法
2013/08/07 Javascript
javascript实现验证IP地址等相关信息代码
2015/05/10 Javascript
JS函数的几种定义方式分析
2015/12/17 Javascript
基于Bootstrap3表格插件和分页插件实例详解
2016/05/17 Javascript
JavaScript实现弹出广告功能
2017/03/30 Javascript
使用requirejs模块化开发多页面一个入口js的使用方式
2017/06/14 Javascript
Vuex提升学习篇
2018/01/11 Javascript
详解vuejs2.0 select 动态绑定下拉框支持多选
2019/04/25 Javascript
浅谈vuex中store的命名空间
2019/11/08 Javascript
JavaScript图片旋转效果实现方法详解
2020/06/28 Javascript
vue中父子组件的参数传递和应用示例
2021/01/04 Vue.js
python client使用http post 到server端的代码
2013/02/10 Python
python用pickle模块实现“增删改查”的简易功能
2017/06/07 Python
python实现csv格式文件转为asc格式文件的方法
2018/03/23 Python
解决python2 绘图title,xlabel,ylabel出现中文乱码的问题
2019/01/29 Python
Python进程,多进程,获取进程id,给子进程传递参数操作示例
2019/10/11 Python
Python 读取有公式cell的结果内容实例方法
2020/02/17 Python
Python unittest装饰器实现原理及代码
2020/09/08 Python
Python基于staticmethod装饰器标示静态方法
2020/10/17 Python
IE兼容css3圆角的实现代码
2011/07/21 HTML / CSS
一款利用纯css3实现的360度翻转按钮的实例教程
2014/11/05 HTML / CSS
CSS3实现菜单悬停效果
2020/11/17 HTML / CSS
节约能源标语
2014/06/17 职场文书
小学爱国卫生月活动总结
2014/06/30 职场文书
详解Java实践之建造者模式
2021/06/18 Java/Android
Python爬虫框架之Scrapy中Spider的用法
2021/06/28 Python
SpringBoot整合阿里云视频点播的过程详解
2021/12/06 Java/Android