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实现从字符串中找出字符1的位置以及个数的方法
Aug 25 Python
浅谈Python爬取网页的编码处理
Nov 04 Python
python开发利器之ulipad的使用实践
Mar 16 Python
python3基于OpenCV实现证件照背景替换
Jul 18 Python
使用Pandas对数据进行筛选和排序的实现
Jul 29 Python
Python中print函数简单使用总结
Aug 05 Python
python 发送json数据操作实例分析
Oct 15 Python
python实现KNN分类算法
Oct 16 Python
Django User 模块之 AbstractUser 扩展详解
Mar 11 Python
Django 删除upload_to文件的步骤
Mar 30 Python
解决运行django程序出错问题 'str'object has no attribute'_meta'
Jul 15 Python
Pandas 稀疏数据结构的实现
Jul 25 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制作静态网站的模板框架(一)
2006/10/09 PHP
使用PHP下载CSS文件中的图片的代码
2013/09/24 PHP
Thinkphp多文件上传实现方法
2014/10/31 PHP
php中异常处理方法小结
2015/01/09 PHP
PHP实现的DES加密解密封装类完整实例
2017/04/29 PHP
jQuery 选择器理解
2010/03/16 Javascript
JavaScript创建一个欢迎cookie弹出窗实现代码
2013/03/15 Javascript
页面js遇到乱码问题的解决方法是和无法转码的情况
2014/04/30 Javascript
JavaScript中的getMilliseconds()方法使用详解
2015/06/10 Javascript
使用Ajax与服务器(JSON)通信实例
2016/11/04 Javascript
详解用webpack2.0构建vue2.0超详细精简版
2017/04/05 Javascript
浅谈在vue项目中如何定义全局变量和全局函数
2017/10/24 Javascript
详解angular2 控制视图的封装模式
2018/12/27 Javascript
JS实现利用闭包判断Dom元素和滚动条的方向示例
2019/08/26 Javascript
vue 兄弟组件的信息传递的方法实例详解
2019/08/30 Javascript
Element Alert警告的具体使用方法
2020/07/27 Javascript
[02:34]DOTA2亚洲邀请赛 BG战队出场宣传片
2015/03/09 DOTA
[40:03]DOTA2上海特级锦标赛主赛事日 - 1 败者组第一轮#1EHOME VS Archon
2016/03/02 DOTA
[01:18:31]DOTA2-DPC中国联赛定级赛 LBZS vs Magma BO3第一场 1月10日
2021/03/11 DOTA
利用Python画ROC曲线和AUC值计算
2016/09/19 Python
python实现微信跳一跳辅助工具步骤详解
2018/01/04 Python
python2.7无法使用pip的解决方法(安装easy_install)
2018/04/03 Python
pycharm中使用anaconda部署python环境的方法步骤
2018/12/19 Python
Python2与Python3的区别实例总结
2019/04/17 Python
DHC中国官方购物网站:日本通信销售No.1化妆品
2016/08/20 全球购物
茱莉蔻美国官网:Jurlique美国
2020/11/24 全球购物
css animation配合SVG制作能量流动效果
2021/03/24 HTML / CSS
俄语专业毕业生推荐信
2013/10/28 职场文书
国贸专业的职业规划书
2014/03/15 职场文书
安全环保标语
2014/06/09 职场文书
中职招生先进个人材料
2014/08/31 职场文书
个人政风行风自查自纠报告
2014/10/21 职场文书
英文感谢信格式
2015/01/21 职场文书
社区公民道德宣传日活动总结
2015/03/23 职场文书
集结号观后感
2015/06/08 职场文书
高中美术教学反思
2016/02/17 职场文书