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 15 Python
Python常见字符串操作函数小结【split()、join()、strip()】
Feb 02 Python
python使用pygame框架实现推箱子游戏
Nov 20 Python
PyQt5 QTable插入图片并动态更新的实例
Jun 18 Python
Python中的正则表达式与JSON数据交换格式
Jul 03 Python
使用Django和Postgres进行全文搜索的实例代码
Feb 13 Python
django实现将修改好的新模型写入数据库
Mar 31 Python
如何在python中执行另一个py文件
Apr 30 Python
virtualenv介绍及简明教程
Jun 23 Python
python两种注释用法的示例
Oct 09 Python
Python collections模块的使用方法
Oct 09 Python
python实现数学模型(插值、拟合和微分方程)
Nov 13 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+Ajax实现表单验证的详解
2013/06/25 PHP
PHP将URL转换成短网址的算法分享
2016/09/13 PHP
php之可变函数的实例详解
2017/09/13 PHP
PHP让数组中有相同值的组成新的数组实例
2017/12/31 PHP
ThinkPHP框架实现FTP图片上传功能示例
2019/04/08 PHP
通过event对象的fromElement属性解决热区设置主实体的一个bug
2008/12/22 Javascript
js 操作符实例代码
2009/10/24 Javascript
基于jquery.Jcrop的头像编辑器
2010/03/01 Javascript
jquery模拟按下回车实现代码
2011/09/20 Javascript
使用JS画图之点、线、面
2015/01/12 Javascript
JS实现文字放大效果的方法
2015/03/03 Javascript
JS实现iframe自适应高度的方法(兼容IE与FireFox)
2016/06/24 Javascript
JS实现获取当前URL和来源URL的方法
2016/08/24 Javascript
JavaScript实现的XML与JSON互转功能详解
2017/02/16 Javascript
javascript实现滑动解锁功能
2017/03/22 Javascript
NodeJS基础API搭建服务器详细过程记录
2017/04/01 NodeJs
jQuery实现分页功能(含ajax请求、后台数据、附完整demo)
2017/04/03 jQuery
nodejs个人博客开发第七步 后台登陆
2017/04/12 NodeJs
Node.js实现文件上传的示例
2017/06/28 Javascript
jQuery.Ajax()的data参数类型详解
2017/07/23 jQuery
Angularjs实现上传图片预览功能
2017/09/01 Javascript
小程序日历控件使用方法详解
2018/12/29 Javascript
vue element 生成无线级左侧菜单的实现代码
2019/08/21 Javascript
JS秒杀倒计时功能完整实例【使用jQuery3.1.1】
2019/09/03 jQuery
深入了解JavaScript 防抖和节流
2019/09/12 Javascript
Vue 中使用富文本编译器wangEditor3的方法
2019/09/26 Javascript
layui 阻止图片上传的实例(before方法)
2019/09/26 Javascript
vue中template的三种写法示例
2020/10/21 Javascript
pyqt4教程之widget使用示例分享
2014/03/07 Python
Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
2018/03/19 Python
IntelliJ IDEA安装运行python插件方法
2018/12/10 Python
Python Django 前后端分离 API的方法
2019/08/28 Python
python 串口读取+存储+输出处理实例
2019/12/26 Python
基于HTML5的WebSocket的实例代码
2018/08/15 HTML / CSS
前台接待员岗位职责
2014/01/02 职场文书
大学生违纪检讨书300字
2014/10/25 职场文书