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算法学习之桶排序算法实例(分块排序)
Dec 18 Python
python改变日志(logging)存放位置的示例
Mar 27 Python
详解在Python程序中自定义异常的方法
Oct 16 Python
python3 pandas 读取MySQL数据和插入的实例
Apr 20 Python
Python操作Oracle数据库的简单方法和封装类实例
May 07 Python
python 读写excel文件操作示例【附源码下载】
Jun 19 Python
Python中的类与类型示例详解
Jul 10 Python
django框架创建应用操作示例
Sep 26 Python
python 项目目录结构设置
Feb 14 Python
Macbook安装Python最新版本、GUI开发环境、图像处理、视频处理环境详解
Feb 17 Python
详解Pycharm与anaconda安装配置指南
Aug 25 Python
django如何自定义manage.py管理命令
Apr 27 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
基于JQuery.timer插件实现一个计时器
2010/04/25 Javascript
在IE6下发生Internet Explorer cannot open the Internet site错误
2010/06/21 Javascript
浅谈tudou土豆网首页图片延迟加载的效果
2010/06/23 Javascript
网页中CDATA标记的说明
2010/09/12 Javascript
$(document).ready(function() {})不执行初始化脚本
2014/06/19 Javascript
JavaScript操作XML文件之XML读取方法
2015/06/09 Javascript
实现JavaScript的组成----BOM和DOM详解
2016/05/18 Javascript
Angular2 环境配置详细介绍
2016/09/21 Javascript
利用C/C++编写node.js原生模块的方法教程
2017/07/07 Javascript
Nodejs之TCP服务端与客户端聊天程序详解
2017/07/07 NodeJs
详解react-router4 异步加载路由两种方法
2017/09/12 Javascript
vue.js实例对象+组件树的详细介绍
2017/10/20 Javascript
Angular5集成eventbus的示例代码
2018/07/19 Javascript
bootstrap与pagehelper实现分页效果
2018/12/29 Javascript
Vue组件实现触底判断
2019/06/26 Javascript
微信小程序实现禁止分享代码实例
2019/10/19 Javascript
python实现的一个p2p文件传输实例
2014/06/04 Python
举例讲解Python中的算数运算符的用法
2015/05/13 Python
详解python 发送邮件实例代码
2016/12/22 Python
django框架之cookie/session的使用示例(小结)
2018/10/15 Python
PyQt5实现简单数据标注工具
2019/03/18 Python
如何基于Python批量下载音乐
2019/11/11 Python
python实现音乐播放器 python实现花框音乐盒子
2020/02/25 Python
Python flask框架实现查询数据库并显示数据
2020/06/04 Python
Python 通过爬虫实现GitHub网页的模拟登录的示例代码
2020/08/17 Python
Python爬虫之Selenium实现键盘事件
2020/12/04 Python
Urban Outfitters德国官网:美国跨国生活方式零售公司
2018/05/21 全球购物
iHerb中文官网:维生素、保健品和健康产品
2018/11/01 全球购物
李维斯牛仔裤荷兰官方网站:Levi’s NL
2020/08/23 全球购物
介绍一下Make? 为什么使用make
2013/12/08 面试题
大学生会计职业生涯规划范文
2014/02/28 职场文书
洗车工岗位职责
2014/03/15 职场文书
党员干部观看《周恩来四个昼夜》思想汇报
2014/09/10 职场文书
教学改革问题查摆整改措施
2014/09/27 职场文书
2014年电教工作总结
2014/12/19 职场文书
MySQL限制查询和数据排序介绍
2022/03/25 MySQL