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中使用tarfile压缩、解压tar归档文件示例
Apr 05 Python
图文讲解选择排序算法的原理及在Python中的实现
May 04 Python
wxpython中Textctrl回车事件无效的解决方法
Jul 21 Python
python交互式图形编程实例(二)
Nov 17 Python
django用户注册、登录、注销和用户扩展的示例
Mar 19 Python
基于python实现聊天室程序
Jul 27 Python
使用PyCharm创建Django项目及基本配置详解
Oct 24 Python
python获取时间及时间格式转换问题实例代码详解
Dec 06 Python
Python微医挂号网医生数据抓取
Jan 24 Python
django 自定义过滤器的实现
Feb 26 Python
浅谈PyQt5 的帮助文档查找方法,可以查看每个类的方法
Jun 25 Python
python解析命令行参数的三种方法详解
Nov 29 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的curl实现get和post的代码
2008/08/23 PHP
DedeCMS 核心类TypeLink.class.php摘要笔记
2010/04/07 PHP
数据库中排序的对比及使用条件详解
2012/02/23 PHP
PHP中redis的用法深入解析
2014/02/20 PHP
php命令行使用方法和命令行参数说明
2014/04/08 PHP
微信红包随机生成算法php版
2016/07/21 PHP
PHP实现对二维数组某个键排序的方法
2016/09/14 PHP
PHP+MYSQL实现读写分离简单实战
2017/03/13 PHP
js jquery ajax的几种用法总结(及优缺点介绍)
2014/01/28 Javascript
javascript中字符串拼接详解
2014/09/26 Javascript
jquery 操作css样式、位置、尺寸方法汇总
2014/11/28 Javascript
详解AngularJS中的表格使用
2015/06/16 Javascript
JS实现的不规则TAB选项卡效果代码
2015/09/18 Javascript
jQuery实现三级菜单的代码
2016/05/09 Javascript
JavaScript制作颜色反转小游戏
2016/09/25 Javascript
nodejs入门教程一:概念与用法简介
2017/04/24 NodeJs
使用Browserify来实现CommonJS的浏览器加载方法
2017/05/14 Javascript
深入浅析vue-cli@3.0 使用及配置说明
2019/05/08 Javascript
关于vue 项目中浏览器跨域的配置问题
2020/11/10 Javascript
浅析python中的迭代与迭代对象
2018/10/08 Python
python pygame模块编写飞机大战
2018/11/20 Python
python mac下安装虚拟环境的图文教程
2019/04/12 Python
python pandas cumsum求累计次数的用法
2019/07/29 Python
python collections模块的使用
2020/10/16 Python
英文版销售经理个人求职信
2013/11/20 职场文书
春风行动实施方案
2014/03/28 职场文书
电子信息工程专业自荐书
2014/06/24 职场文书
个人整改方案范文
2014/10/25 职场文书
事业单位个人查摆问题及整改措施
2014/10/28 职场文书
离职报告格式
2014/11/04 职场文书
党员自我评价范文2015
2015/03/03 职场文书
大学生思想道德自我评价
2015/03/09 职场文书
资金申请报告范文
2015/05/14 职场文书
2016年中学法制宣传日活动总结
2016/04/01 职场文书
python tqdm用法及实例详解
2021/06/16 Python
浅谈Redis变慢的原因及排查方法
2022/06/21 Redis