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去除所有html标签的方法
May 05 Python
django之session与分页(实例讲解)
Nov 13 Python
Django中login_required装饰器的深入介绍
Nov 24 Python
Python线程创建和终止实例代码
Jan 20 Python
python中字符串内置函数的用法总结
Sep 13 Python
Python 3.x基于Xml数据的Http请求方法
Dec 28 Python
python utc datetime转换为时间戳的方法
Jan 15 Python
pytorch torch.expand和torch.repeat的区别详解
Nov 05 Python
Python和Anaconda和Pycharm安装教程图文详解
Feb 04 Python
tensorflow/core/platform/cpu_feature_guard.cc:140] Your CPU supports instructions that this T
Jun 22 Python
浅析Python __name__ 是什么
Jul 07 Python
Python使用requests模块爬取百度翻译
Aug 25 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实现mysql同步的实现方法
2009/10/21 PHP
关于Javascript 的 prototype问题。
2007/01/03 Javascript
jQuery+css+html实现页面遮罩弹出框
2013/03/21 Javascript
JS上传前预览图片实例
2013/03/25 Javascript
jquery animate实现鼠标放上去显示离开隐藏效果
2013/07/21 Javascript
Javascript实现页面跳转的几种方式分享
2013/10/26 Javascript
jquery果冻抖动效果实现方法
2015/01/15 Javascript
深入理解JavaScript系列(34):设计模式之命令模式详解
2015/03/03 Javascript
jQuery组件easyui对话框实现代码
2016/08/25 Javascript
jQuery弹出层插件popShow用法示例
2017/01/23 Javascript
React-Native 组件之 Modal的使用详解
2017/08/08 Javascript
浅谈关于.vue文件中style的scoped属性
2017/08/19 Javascript
JavaScript数组排序reverse()和sort()方法详解
2017/12/24 Javascript
Vue拖拽组件开发实例详解
2018/05/11 Javascript
Egg Vue SSR 服务端渲染数据请求与asyncData
2019/11/24 Javascript
[03:11]不朽宝藏三外观展示
2020/09/18 DOTA
Python设计模式编程中Adapter适配器模式的使用实例
2016/03/02 Python
python 转换 Javascript %u 字符串为python unicode的代码
2016/09/06 Python
使用Python对微信好友进行数据分析
2018/06/27 Python
利用pandas进行大文件计数处理的方法
2018/07/25 Python
Appium+Python自动化测试之运行App程序示例
2019/01/23 Python
Python API 自动化实战详解(纯代码)
2019/06/11 Python
深入了解Python iter() 方法的用法
2019/07/11 Python
opencv 图像轮廓的实现示例
2020/07/08 Python
html5 Canvas画图教程(5)—canvas里画曲线之arc方法
2013/01/09 HTML / CSS
基本款天堂:Everlane
2017/05/13 全球购物
物流专业大学生的自我鉴定
2013/11/13 职场文书
采购部部长岗位职责
2014/02/06 职场文书
毕业生求职信
2014/06/10 职场文书
竞选学习委员演讲稿
2014/09/01 职场文书
中秋节寄语2015
2015/03/24 职场文书
高质量“欢迎词”
2019/04/03 职场文书
导游词之藏龙百瀑景区
2019/12/30 职场文书
Python中json.load()和json.loads()有哪些区别
2021/06/07 Python
教你使用Jenkins集成Harbor自动发布镜像
2022/04/03 Servers
Linux中文件的基本属性介绍
2022/06/01 Servers