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的一些用法分享
Oct 07 Python
Python实现抓取页面上链接的简单爬虫分享
Jan 21 Python
Python判断Abundant Number的方法
Jun 15 Python
Python实现短网址ShortUrl的Hash运算实例讲解
Aug 10 Python
Python使用SocketServer模块编写基本服务器程序的教程
Jul 12 Python
python 多维切片之冒号和三个点的用法介绍
Apr 19 Python
Selenium控制浏览器常见操作示例
Aug 13 Python
win10下python3.5.2和tensorflow安装环境搭建教程
Sep 19 Python
Python+OpenCV图片局部区域像素值处理改进版详解
Jan 23 Python
django celery redis使用具体实践
Apr 08 Python
python logging 日志的级别调整方式
Feb 21 Python
keras训练浅层卷积网络并保存和加载模型实例
Jul 02 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
为什么《星际争霸》是测试人工智能的理想战场
2019/12/03 星际争霸
分享PHP入门的学习方法
2007/01/02 PHP
Linux下CoreSeek及PHP扩展模块的安装
2012/09/23 PHP
thinkphp的c方法使用示例
2014/02/24 PHP
php判断数组元素中是否存在某个字符串的方法
2014/06/14 PHP
php数据访问之增删改查操作
2016/05/09 PHP
jquery 学习之二 属性(html()与html(val))
2010/11/25 Javascript
jqueyr判断checkbox组的选中(示例代码)
2013/11/08 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 简史
2015/01/09 Javascript
JS实现带有3D立体感的银灰色竖排折叠菜单代码
2015/10/20 Javascript
Position属性之relative用法
2015/12/14 Javascript
JS去除重复并统计数量的实现方法
2016/12/15 Javascript
angularJS 指令封装回到顶部示例详解
2017/01/22 Javascript
使用JavaScript中的lodash编写双色球效果
2018/06/24 Javascript
当vue路由变化时,改变导航栏的样式方法
2018/08/22 Javascript
javascript设计模式 ? 访问者模式原理与用法实例分析
2020/04/26 Javascript
解决Echarts2竖直datazoom滑动后显示数据不全的问题
2020/07/20 Javascript
[04:11]DOTA2上海特级锦标赛主赛事首日TOP10
2016/03/03 DOTA
[55:25]2018DOTA2亚洲邀请赛3月29日 小组赛A组 VG VS OG
2018/03/30 DOTA
Python实现批量读取图片并存入mongodb数据库的方法示例
2018/04/02 Python
用Python编写一个简单的CS架构后门的方法
2018/11/20 Python
打包PyQt5应用时的注意事项
2020/02/14 Python
Python类super()及私有属性原理解析
2020/06/15 Python
python基于opencv 实现图像时钟
2021/01/04 Python
python爬虫爬取图片的简单代码
2021/01/18 Python
全球知名旅游社区法国站点:TripAdvisor法国
2016/08/03 全球购物
Simons官方网站:加拿大时尚零售商
2020/02/20 全球购物
学年自我鉴定范文
2013/10/01 职场文书
房地产管理毕业生自荐信
2013/11/04 职场文书
深入开展党的群众路线教育实践活动方案
2014/02/04 职场文书
报告会主持词
2014/04/02 职场文书
企业宣传稿范文
2015/07/23 职场文书
2015年小学生国庆节演讲稿
2015/07/30 职场文书
2016年推广普通话宣传周活动总结
2016/04/06 职场文书
Java Dubbo框架知识点梳理
2021/06/26 Java/Android
PostgreSQL解析URL的方法
2021/08/02 PostgreSQL