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中的多线程编程
Apr 09 Python
用matplotlib画等高线图详解
Dec 14 Python
python实现决策树
Dec 21 Python
儿童python练习实例
May 27 Python
python实现俄罗斯方块游戏
Mar 25 Python
Python3爬虫爬取百姓网列表并保存为json功能示例【基于request、lxml和json模块】
Dec 05 Python
python网络编程 使用UDP、TCP协议收发信息详解
Aug 29 Python
python栈的基本定义与使用方法示例【初始化、赋值、入栈、出栈等】
Oct 24 Python
pycharm修改file type方式
Nov 19 Python
python numpy数组中的复制知识解析
Feb 03 Python
Python3爬虫中Selenium的用法详解
Jul 10 Python
Python3爬虫ChromeDriver的安装实例
Feb 06 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
Godaddy空间Zend Optimizer升级方法
2010/05/10 PHP
PHP Zip解压 文件在线解压缩的函数代码
2010/05/26 PHP
php 无限级分类,超级简单的无限级分类,支持输出树状图
2014/06/29 PHP
Laravel中任务调度console使用方法小结
2017/05/07 PHP
Laravel框架用户登陆身份验证实现方法详解
2017/09/14 PHP
PHP反射基础知识回顾
2020/09/10 PHP
指定js可访问其它域名的cookie的方法
2007/09/18 Javascript
JavaScript获取GridView选择的行内容
2009/04/14 Javascript
Jquery Ajax学习实例 向页面发出请求,返回XML格式数据
2010/03/14 Javascript
javascript XMLHttpRequest对象全面剖析
2010/04/24 Javascript
基于JQuery实现CheckBox全选全不选
2011/06/27 Javascript
js onkeypress与onkeydown 事件区别详细说明
2012/12/13 Javascript
基于JavaScript 下namespace 功能的简单分析
2013/07/05 Javascript
jquery获得option的值和对option进行操作
2013/12/13 Javascript
详解Javascript动态操作CSS
2014/12/08 Javascript
jQuery each函数源码分析
2016/05/25 Javascript
Vue表单实例代码
2016/09/05 Javascript
jquery validate表单验证插件
2016/09/06 Javascript
jquery实现异步加载图片(懒加载图片一种方式)
2017/04/24 jQuery
原生JS实现自定义滚动条效果
2020/10/27 Javascript
Angularjs上传图片实例详解
2017/08/06 Javascript
jQuery中extend函数简单用法示例
2017/10/11 jQuery
JavaScript实现为事件句柄绑定监听函数的方法分析
2017/11/14 Javascript
vue v-model实现自定义样式多选与单选功能
2018/07/05 Javascript
TensorFlow.js 微信小程序插件开始支持模型缓存的方法
2020/02/21 Javascript
Django静态资源URL STATIC_ROOT的配置方法
2014/11/08 Python
python实现查找excel里某一列重复数据并且剔除后打印的方法
2015/05/26 Python
Python 字符串、列表、元组的截取与切片操作示例
2019/09/17 Python
python调用Matplotlib绘制分布点图
2019/10/18 Python
python 爬虫请求模块requests详解
2020/12/04 Python
使用HTML5的File实现base64和图片的互转
2013/08/01 HTML / CSS
美国宠物用品网站:Value Pet Supplies
2018/03/17 全球购物
SHEIN美国:购买时髦的女性服装
2020/12/02 全球购物
飞机制造技术专业求职信
2014/07/27 职场文书
治庸问责工作总结
2015/08/11 职场文书
公司中层管理培训心得体会
2016/01/11 职场文书