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发送Email方法实例
Aug 21 Python
python删除列表中重复记录的方法
Apr 28 Python
Python循环语句中else的用法总结
Sep 11 Python
Ubuntu下创建虚拟独立的Python环境全过程
Feb 10 Python
Python OpenCV处理图像之图像直方图和反向投影
Jul 10 Python
使用python获取(宜宾市地震信息)地震信息
Jun 20 Python
Python使用百度翻译开发平台实现英文翻译为中文功能示例
Aug 08 Python
python 采用paramiko 远程执行命令及报错解决
Oct 21 Python
用Python解数独的方法示例
Oct 24 Python
python使用turtle库绘制奥运五环
Feb 24 Python
Python3 filecmp模块测试比较文件原理解析
Mar 23 Python
Python实现排序方法常见的四种
Jul 15 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
无JS,完全php面向过程数据分页实现代码
2012/08/27 PHP
PHP Yii框架之表单验证规则大全
2015/11/16 PHP
PHPCMS2008广告模板SQL注入漏洞修复
2016/10/11 PHP
在网页中屏蔽快捷键
2006/09/06 Javascript
IE6与IE7中,innerHTML获取param的区别
2009/03/15 Javascript
JavaScript与Div对层定位和移动获得坐标的实现代码
2010/09/08 Javascript
Function.prototype.bind用法示例
2013/09/16 Javascript
详解JavaScript中的表单验证
2015/06/16 Javascript
JS实现浏览器状态栏文字从右向左弹出效果代码
2015/10/27 Javascript
jquery实现九宫格大转盘抽奖
2015/11/13 Javascript
滚动条的监听与内容随着滚动条动态加载的实现
2017/02/08 Javascript
xmlplus组件设计系列之按钮(2)
2017/04/26 Javascript
100行代码实现一个vue分页组功能
2018/11/06 Javascript
详解关于element级联选择器数据回显问题
2019/02/20 Javascript
Vue项目引发的「过滤器」使用教程
2019/03/12 Javascript
ES6入门教程之变量的解构赋值详解
2019/04/13 Javascript
详解Vue的ref特性的使用
2020/01/24 Javascript
深入浅析golang zap 日志库使用(含文件切割、分级别存储和全局使用等)
2020/02/19 Javascript
Js跳出两级循环方法代码实例
2020/09/22 Javascript
[01:19]2014DOTA2国际邀请赛 采访TITAN战队ohaiyo 能赢DK很幸运
2014/07/12 DOTA
python 自动提交和抓取网页
2009/07/13 Python
python list 合并连接字符串的方法
2013/03/09 Python
高性能web服务器框架Tornado简单实现restful接口及开发实例
2014/07/16 Python
Python类反射机制使用实例解析
2019/12/30 Python
python模拟哔哩哔哩滑块登入验证的实现
2020/04/24 Python
python获取时间戳的实现示例(10位和13位)
2020/09/23 Python
python中entry用法讲解
2020/12/04 Python
临床医师个人自我评价
2014/04/06 职场文书
土建专业大学生自荐信范文
2014/04/09 职场文书
工商干部先进事迹
2014/05/14 职场文书
投标承诺书怎么写
2014/05/24 职场文书
2014年幼儿园班级工作总结
2014/12/17 职场文书
先进班集体申报材料
2014/12/26 职场文书
市场总监岗位职责
2015/02/11 职场文书
汉字听写大会观后感
2015/06/12 职场文书
大学社团活动总结怎么写
2019/06/21 职场文书