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的Flask框架实现视频的流媒体传输
Mar 31 Python
python函数参数(必须参数、可变参数、关键字参数)
Aug 16 Python
Python3将数据保存为txt文件的方法
Sep 12 Python
基于python调用psutil模块过程解析
Dec 20 Python
postman和python mock测试过程图解
Feb 22 Python
Pycharm连接远程服务器过程图解
Apr 30 Python
使用Python构造hive insert语句说明
Jun 06 Python
Python爬虫逆向分析某云音乐加密参数的实例分析
Dec 04 Python
python中pow函数用法及功能说明
Dec 04 Python
Selenium关闭INFO:CONSOLE提示的解决
Dec 07 Python
pandas中DataFrame重置索引的几种方法
May 24 Python
浅谈Python数学建模之线性规划
Jun 23 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 print类函数使用总结
2010/06/25 PHP
Smarty变量调节器失效的解决办法
2014/08/20 PHP
php生成二维码图片方法汇总
2016/12/17 PHP
PHP call_user_func和call_user_func_array函数的简单理解与应用分析
2019/11/25 PHP
鼠标滑过出现预览的大图提示效果
2014/02/26 Javascript
HTML,CSS,JavaScript速查表推荐
2014/12/02 Javascript
JavaScript实现16进制颜色值转RGB的方法
2015/02/09 Javascript
AngularJS下$http服务Post方法传递json参数的实例
2018/03/29 Javascript
JS中获取 DOM 元素的绝对位置实例详解
2018/04/23 Javascript
vue2单元测试环境搭建
2018/05/24 Javascript
基于Vue实现微信小程序的图文编辑器
2018/07/25 Javascript
js canvas实现红包照片效果
2018/08/21 Javascript
Vue 路由切换时页面内容没有重新加载的解决方法
2018/09/01 Javascript
基于Vue实现可以拖拽的树形表格实例详解
2018/10/18 Javascript
使用Promise封装小程序wx.request的实现方法
2019/11/13 Javascript
微信小程序点击滚动到指定位置的实现
2020/05/22 Javascript
如何在node环境实现“get数据解析”代码实例
2020/07/03 Javascript
基于javascript处理nginx请求过程详解
2020/07/07 Javascript
使用JavaScript实现贪吃蛇游戏
2020/09/29 Javascript
[00:43]DOTA2小紫本全民票选福利PA至宝全方位展示
2014/11/25 DOTA
Python3.x和Python2.x的区别介绍
2013/02/12 Python
Python中for循环控制语句用法实例
2015/06/02 Python
Python实现判断给定列表是否有重复元素的方法
2018/04/11 Python
PyCharm设置每行最大长度限制的方法
2019/01/16 Python
Python3实现计算两个数组的交集算法示例
2019/04/03 Python
详解python 爬取12306验证码
2019/05/10 Python
python 3.7.4 安装 opencv的教程
2019/10/10 Python
python requests模拟登陆github的实现方法
2019/12/26 Python
通过代码实例了解Python异常本质
2020/09/16 Python
俄罗斯GamePark游戏商店网站:购买游戏、游戏机和配件
2020/03/13 全球购物
会计系毕业个人自荐信格式
2013/09/23 职场文书
《鲁班和橹板》教学反思
2014/04/27 职场文书
社区优秀志愿者先进事迹
2014/05/09 职场文书
新闻编辑求职信
2014/07/13 职场文书
公司收款委托书范本
2014/09/20 职场文书
MySQL分区表管理命令汇总
2022/03/21 MySQL