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 相关文章推荐
c++生成dll使用python调用dll的方法
Jan 20 Python
Python引用模块和查找模块路径
Mar 17 Python
Python自定义主从分布式架构实例分析
Sep 19 Python
网红编程语言Python将纳入高考你怎么看?
Jun 07 Python
python学习开发mock接口
Apr 28 Python
Python re 模块findall() 函数返回值展现方式解析
Aug 09 Python
Python Multiprocessing多进程 使用tqdm显示进度条的实现
Aug 13 Python
使用Django搭建一个基金模拟交易系统教程
Nov 18 Python
Python使用20行代码实现微信聊天机器人
Jun 05 Python
将pycharm配置为matlab或者spyder的用法说明
Jun 08 Python
理解python中装饰器的作用
Jul 21 Python
梳理总结Python开发中需要摒弃的18个坏习惯
Jan 22 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生成图形(Libchart)实例
2013/11/06 PHP
Yii实现的多级联动下拉菜单
2016/07/13 PHP
PHP ajax+jQuery 实现批量删除功能实例代码小结
2018/12/06 PHP
jQuery formValidator表单验证插件开源了 含API帮助、源码、示例
2008/08/14 Javascript
js中判断Object、Array、Function等引用类型对象是否相等
2012/08/29 Javascript
基于javascript滚动图片具体实现
2013/11/18 Javascript
js实现全屏漂浮广告移入光标停止移动
2013/12/02 Javascript
如何通过js实现图片预览功能【附实例代码】
2016/03/30 Javascript
JS中多步骤多分步的StepJump组件实例详解
2016/04/01 Javascript
浅谈JavaScript 数据属性和访问器属性
2016/09/01 Javascript
vue element-ui table表格滚动加载方法
2018/03/02 Javascript
JavaScript寄生组合式继承原理与用法分析
2019/01/11 Javascript
webpack中如何加载静态文件的方法步骤
2019/05/18 Javascript
vue flex 布局实现div均分自动换行的示例代码
2020/08/05 Javascript
js面试题之异步问题的深入理解
2020/09/20 Javascript
Python内置的字符串处理函数详细整理(覆盖日常所用)
2014/08/19 Python
跟老齐学Python之Import 模块
2014/10/13 Python
python查找目录下指定扩展名的文件实例
2015/04/01 Python
用Python编写一个每天都在系统下新建一个文件夹的脚本
2015/05/04 Python
Python md5与sha1加密算法用法分析
2017/07/14 Python
Python语言描述连续子数组的最大和
2018/01/04 Python
Python3标准库总结
2019/02/19 Python
Python中的asyncio代码详解
2019/06/10 Python
解决python 上传图片限制格式问题
2019/10/30 Python
基于pycharm实现批量修改变量名
2020/06/02 Python
美丽的现代设计家具:2Modern
2018/07/26 全球购物
Ray-Ban雷朋太阳眼镜英国官网:Ray-Ban UK
2019/11/23 全球购物
2013年入党人员的自我鉴定
2013/10/25 职场文书
优秀毕业生自荐信
2014/06/10 职场文书
医疗专业毕业生求职信
2014/08/28 职场文书
2014年机关党委工作总结
2014/12/11 职场文书
离婚起诉状范本
2015/05/19 职场文书
2015年电信员工工作总结
2015/05/26 职场文书
python 爬取哔哩哔哩up主信息和投稿视频
2021/06/07 Python
pytorch分类模型绘制混淆矩阵以及可视化详解
2022/04/07 Python
Golang 结构体数据集合
2022/04/22 Golang