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求众数问题实例
Sep 26 Python
python脚本实现数据导出excel格式的简单方法(推荐)
Dec 30 Python
Python爬虫设置代理IP的方法(爬虫技巧)
Mar 04 Python
使用Anaconda3建立虚拟独立的python2.7环境方法
Jun 11 Python
Python中pandas模块DataFrame创建方法示例
Jun 20 Python
Python文件读写保存操作的示例代码
Sep 14 Python
Pandas删除数据的几种情况(小结)
Jun 21 Python
python 将日期戳(五位数时间)转换为标准时间
Jul 11 Python
python将字典内容写入json文件的实例代码
Aug 12 Python
Python 通过爬虫实现GitHub网页的模拟登录的示例代码
Aug 17 Python
Python+logging输出到屏幕将log日志写入文件
Nov 11 Python
python用分数表示矩阵的方法实例
Jan 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数组输出html表格的方法
2014/02/24 PHP
php防止用户重复提交表单
2015/11/02 PHP
PHP模糊查询的实现方法(推荐)
2016/09/06 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
2017/09/22 PHP
ThinkPHP5.1表单令牌Token失效问题的解决
2019/03/22 PHP
PHP使用Redis实现Session共享的实现示例
2019/05/12 PHP
Thinkphp5框架实现图片、音频和视频文件的上传功能详解
2019/08/27 PHP
php判断数组是否为空的实例方法
2020/05/10 PHP
js实现快速分享功能(你的文章分享工具)
2013/06/25 Javascript
图片Slider 带左右按钮的js示例
2013/08/30 Javascript
JavaScript中使用Substring删除字符串最后一个字符
2013/11/03 Javascript
工作中比较实用的JavaScript验证和数据处理的干货(经典)
2016/08/03 Javascript
利用js编写响应式侧边栏
2016/09/17 Javascript
jquery Easyui Datagrid实现批量操作(编辑,删除,添加)
2017/02/20 Javascript
js遍历获取表格内数据的方法(必看)
2017/04/06 Javascript
Vue组件之全局组件与局部组件的使用详解
2017/10/09 Javascript
vue学习教程之带你一步步详细解析vue-cli
2017/12/26 Javascript
Layui事件监听的实现(表单和数据表格)
2019/10/17 Javascript
Python 分析Nginx访问日志并保存到MySQL数据库实例
2014/03/13 Python
CentOS安装pillow报错的解决方法
2016/01/27 Python
Python中Django 后台自定义表单控件
2017/03/28 Python
Python使用django搭建web开发环境
2017/06/09 Python
Python实现多进程共享数据的方法分析
2017/12/04 Python
Python3.5常见内置方法参数用法实例详解
2019/04/29 Python
pandas 数据结构之Series的使用方法
2019/06/21 Python
python定位xpath 节点位置的方法
2019/08/27 Python
python scipy卷积运算的实现方法
2019/09/16 Python
基于python实现操作git过程代码解析
2020/07/27 Python
领先的英国注册在线药房 :Simply Meds Online
2019/03/28 全球购物
Cynthia Rowley官网:全球领先的生活方式品牌
2020/10/27 全球购物
介绍一下write命令
2012/09/24 面试题
捐助贫困学生倡议书
2014/05/16 职场文书
公安机关查摆剖析材料
2014/10/10 职场文书
行政主管岗位职责
2015/02/03 职场文书
优秀乡村医生事迹材料(2016精选版)
2016/02/29 职场文书
Vue vee-validate插件的简单使用
2021/06/22 Vue.js