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中的日期时间处理详解
Nov 17 Python
Python实现视频下载功能
Mar 14 Python
python实现批量图片格式转换
Jun 16 Python
django 将model转换为字典的方法示例
Oct 16 Python
python文本数据处理学习笔记详解
Jun 17 Python
python进程池实现的多进程文件夹copy器完整示例
Nov 27 Python
python matplotlib.pyplot.plot()参数用法
Apr 14 Python
浅谈Python中re.match()和re.search()的使用及区别
Apr 14 Python
浅谈keras保存模型中的save()和save_weights()区别
May 21 Python
Python在centos7.6上安装python3.9的详细教程(默认python版本为2.7.5)
Oct 15 Python
Ubuntu20下的Django安装的方法步骤
Jan 24 Python
python基于selenium爬取斗鱼弹幕
Feb 20 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
从零开始 教你如何搭建Discuz!4.1论坛
2006/07/07 PHP
php中处理模拟rewrite 效果
2006/12/09 PHP
php读取富文本的时p标签会出现红线是怎么回事
2014/05/13 PHP
PHP PDOStatement::errorCode讲解
2019/01/31 PHP
php探针使用原理和技巧讲解
2019/09/17 PHP
JavaScript 替换Html标签实现代码
2009/10/14 Javascript
小巧强大的jquery layer弹窗弹层插件
2015/12/06 Javascript
AngularJS 避繁就简的路由
2016/07/01 Javascript
详解使用Node.js 将txt文件转为Excel文件
2017/07/05 Javascript
JS实现的简单表单验证功能完整实例
2017/10/14 Javascript
JS处理数据四舍五入(tofixed与round的区别详解)
2017/10/26 Javascript
实例教学如何写vue插件
2017/11/30 Javascript
JS+CSS实现滚动数字时钟效果
2017/12/25 Javascript
详解vue-cli3 中跨域解决方案
2019/04/10 Javascript
vue element中axios下载文件(后端Python)
2019/05/10 Javascript
vuex state中的数组变化监听实例
2019/11/06 Javascript
Python和Java的语法对比分析语法简洁上python的确完美胜出
2019/05/10 Python
python flask解析json数据不完整的解决方法
2019/05/26 Python
selenium+python自动化测试环境搭建步骤
2019/06/03 Python
Pycharm远程调试原理及具体配置详解
2019/08/08 Python
用python实现英文字母和相应序数转换的方法
2019/09/18 Python
PyCharm 2020 激活到 2100 年的教程
2020/03/25 Python
CSS3实现可翻转的hover效果
2018/05/23 HTML / CSS
高中美术教学反思
2014/01/19 职场文书
《雨霖铃》教学反思
2014/02/22 职场文书
政府门卫岗位职责
2014/04/29 职场文书
图书馆标语
2014/06/19 职场文书
公证委托书标准格式
2014/09/11 职场文书
大学生党员自我剖析材料
2014/10/06 职场文书
教师作风建设剖析材料
2014/10/11 职场文书
检讨书范文300字
2015/01/28 职场文书
2015年社区综治工作总结
2015/04/21 职场文书
儿子满月酒致辞
2015/07/29 职场文书
2016年国庆节新闻稿范文
2015/11/25 职场文书
用几道面试题来看JavaScript执行机制
2021/04/30 Javascript
不要在HTML中滥用div
2021/05/08 HTML / CSS