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简单实现获取当前时间
Aug 27 Python
Python中的并发处理之asyncio包使用的详解
Apr 03 Python
python自动重试第三方包retrying模块的方法
Apr 24 Python
python 定义给定初值或长度的list方法
Jun 23 Python
python保存二维数组到txt文件中的方法
Nov 15 Python
带你认识Django
Jan 15 Python
python openvc 裁剪、剪切图片 提取图片的行和列
Sep 19 Python
python Manager 之dict KeyError问题的解决
Dec 21 Python
Linux下升级安装python3.8并配置pip及yum的教程
Jan 02 Python
Python解析多帧dicom数据详解
Jan 13 Python
Python Scrapy框架第一个入门程序示例
Feb 05 Python
Django 实现图片上传和下载功能
Dec 31 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删除页面记录 同时刷新页面 删除条件用GET方式获得
2012/01/10 PHP
PHP中基于ts与nts版本- vc6和vc9编译版本的区别详解
2013/04/26 PHP
一个php生成16位随机数的代码(两种方法)
2014/09/16 PHP
护卫神php套件 php版本升级方法(php5.5.24)
2015/05/10 PHP
php使用GD库创建图片缩略图的方法
2015/06/10 PHP
PHP设置images目录不充许http访问的方法
2016/11/01 PHP
javascript新手语法小结
2008/06/15 Javascript
js 分栏效果实现代码
2009/08/29 Javascript
JQuery 绑定事件时传递参数的实现方法
2009/10/13 Javascript
通过javascript获取iframe里的值示例代码
2013/06/24 Javascript
jquery鼠标放上去显示悬浮层即弹出定位的div层
2014/04/25 Javascript
javascript中递归函数用法注意点
2015/07/30 Javascript
jquery表单验证需要做些什么
2015/11/17 Javascript
JS获取中文拼音首字母并通过拼音首字母快速查找页面内对应中文内容的方法【附demo源码】
2016/08/19 Javascript
JS操作input标签属性checkbox全选的实现代码
2017/03/02 Javascript
JavaScript生成图形验证码
2020/08/24 Javascript
简化vuex的状态管理方案的方法
2018/06/02 Javascript
微信小程序实现多选删除列表数据功能示例
2019/01/15 Javascript
微信小程序-form表单提交代码实例
2019/04/29 Javascript
[02:42]岂曰无衣,与子同袍!DOTA2致敬每一位守护人
2020/02/17 DOTA
在Python程序中进行文件读取和写入操作的教程
2015/04/28 Python
Python之py2exe打包工具详解
2017/06/14 Python
python3.6+opencv3.4实现鼠标交互查看图片像素
2018/02/26 Python
python算法与数据结构之冒泡排序实例详解
2019/06/22 Python
python全局变量引用与修改过程解析
2020/01/07 Python
英国名牌男装店:Standout
2021/02/17 全球购物
亿阳信通股份有限公司C#笔试题
2016/12/06 面试题
专升本自我鉴定
2013/10/10 职场文书
计算机求职信
2013/12/01 职场文书
剪枝的学问教学反思
2014/02/07 职场文书
社区优秀志愿者先进事迹
2014/05/09 职场文书
校长竞聘演讲稿
2014/05/16 职场文书
合作意向书
2014/07/30 职场文书
试用期员工工作自我评价
2014/09/10 职场文书
高中学生自我评价范文
2014/09/23 职场文书
妈妈再爱我一次观后感
2015/06/08 职场文书