python实现的二叉树定义与遍历算法实例


Posted in Python onJune 30, 2017

本文实例讲述了python实现的二叉树定义与遍历算法。分享给大家供大家参考,具体如下:

初学python,需要实现一个决策树,首先实践一下利用python实现一个二叉树数据结构。建树的时候做了处理,保证建立的二叉树是平衡二叉树。

# -*- coding: utf-8 -*-
from collections import deque
class Node:
  def __init__(self,val,left=None,right=None):
    self.val=val
    self.left=left
    self.right=right
  #setter and getter
  def get_val(self):
    return self.val
  def set_val(self,val):
    self.val=val
  def get_left(self):
    return self.left
  def set_left(self,left):
    self.left=left
  def get_right(self):
    return self.right
  def set_right(self,right):
    self.right=right
class Tree:
  def __init__(self,list):
    list=sorted(list)
    self.root=self.build_tree(list)
  #递归建立平衡二叉树
  def build_tree(self,list):
    l=0
    r=len(list)-1
    if(l>r):
      return None
    if(l==r):
      return Node(list[l])
    mid=(l+r)/2
    root=Node(list[mid])
    root.left=self.build_tree(list[:mid])
    root.right=self.build_tree(list[mid+1:])
    return root
  #前序遍历
  def preorder(self,root):
    if(root is None):
      return
    print root.val
    self.preorder(root.left)
    self.preorder(root.right)
  #后序遍历
  def postorder(self,root):
    if(root is None):
      return
    self.postorder(root.left)
    self.postorder(root.right)
    print root.val
  #中序遍历
  def inorder(self,root):
    if(root is None):
      return
    self.inorder(root.left)
    print root.val
    self.inorder(root.right)
  #层序遍历
  def levelorder(self,root):
    if root is None:
      return
    queue =deque([root])
    while(len(queue)>0):
      size=len(queue)
      for i in range(size):
        node =queue.popleft()
        print node.val
        if node.left is not None:
          queue.append(node.left)
        if node.right is not None:
          queue.append(node.right)
list=[1,-1,3,4,5]
tree=Tree(list)
print '中序遍历:'
tree.inorder(tree.root)
print '层序遍历:'
tree.levelorder(tree.root)
print '前序遍历:'
tree.preorder(tree.root)
print '后序遍历:'
tree.postorder(tree.root)

输出:

中序遍历
-1
1
3
4
5
层序遍历
3
-1
4
1
5
前序遍历
3
-1
1
4
5
后序遍历
1
-1
5
4
3

建立的二叉树如下图所示:

python实现的二叉树定义与遍历算法实例

PS:作者的github: https://github.com/zhoudayang

更多关于Python相关内容可查看本站专题:《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
一个简单的python程序实例(通讯录)
Nov 29 Python
Python自动连接ssh的方法
Mar 07 Python
Flask的图形化管理界面搭建框架Flask-Admin的使用教程
Jun 13 Python
一文总结学习Python的14张思维导图
Oct 17 Python
python pygame模块编写飞机大战
Nov 20 Python
解决pandas .to_excel不覆盖已有sheet的问题
Dec 10 Python
Python饼状图的绘制实例
Jan 15 Python
python给微信好友定时推送消息的示例
Feb 20 Python
在win64上使用bypy进行百度网盘文件上传功能
Jan 02 Python
tensorflow 利用expand_dims和squeeze扩展和压缩tensor维度方式
Feb 07 Python
Python逐行读取文件内容的方法总结
Feb 14 Python
python根据字典的键来删除元素的方法
Aug 16 Python
Python使用openpyxl读写excel文件的方法
Jun 30 #Python
python中关于for循环的碎碎念
Jun 30 #Python
Python实现的微信公众号群发图片与文本消息功能实例详解
Jun 30 #Python
python实现给微信公众号发送消息的方法
Jun 30 #Python
Python信息抽取之乱码解决办法
Jun 29 #Python
python urllib urlopen()对象方法/代理的补充说明
Jun 29 #Python
python笔记:mysql、redis操作方法
Jun 28 #Python
You might like
php中curl、fsocket、file_get_content三个函数的使用比较
2014/05/09 PHP
php_imagick实现图片剪切、旋转、锐化、减色或增加特效的方法
2014/12/15 PHP
PHP5.5.15+Apache2.4.10+MySQL5.6.20配置方法分享
2016/05/06 PHP
laravel框架上传图片实现实时预览功能
2019/10/14 PHP
通过实例解析PHP数据类型转换方法
2020/07/11 PHP
js预载入和JavaScript Image()对象使用介绍
2011/08/28 Javascript
jQuery自动添加表单项的方法
2015/07/13 Javascript
JS+CSS实现类似QQ好友及黑名单效果的树型菜单
2015/09/22 Javascript
关于function类中定义变量this的简单说明
2016/05/28 Javascript
Vue实现双向绑定的方法
2016/12/22 Javascript
微信小程序 页面跳转传递值几种方法详解
2017/01/12 Javascript
基于JavaScript实现的插入排序算法分析
2017/04/14 Javascript
微信小程序非swiper组件实现的自定义伪3D轮播图效果示例
2018/12/11 Javascript
react koa rematch 如何打造一套服务端渲染架子
2019/06/26 Javascript
Javascript 对象(object)合并操作实例分析
2019/07/30 Javascript
微信小程序一周时间表功能实现
2019/10/17 Javascript
python使用wmi模块获取windows下硬盘信息的方法
2015/05/15 Python
Python正则表达式教程之三:贪婪/非贪婪特性
2017/03/02 Python
Python使用QRCode模块生成二维码实例详解
2017/06/14 Python
JavaScript实现一维数组转化为二维数组
2018/04/17 Python
Django分页查询并返回jsons数据(中文乱码解决方法)
2018/08/02 Python
python批量下载网站马拉松照片的完整步骤
2018/12/05 Python
Python3.5以上版本lxml导入etree报错的解决方案
2019/06/26 Python
Python 读取串口数据,动态绘图的示例
2019/07/02 Python
Python之time模块的时间戳,时间字符串格式化与转换方法(13位时间戳)
2019/08/12 Python
Python实现自动打开电脑应用的示例代码
2020/04/17 Python
scrapy结合selenium解析动态页面的实现
2020/09/28 Python
html2 canvas生成清晰的图片实现打印功能
2019/09/23 HTML / CSS
机械专业毕业生推荐信范文
2013/11/25 职场文书
求职信格式要求
2014/05/23 职场文书
2014年医院科室工作总结
2014/12/20 职场文书
2015年上半年信访工作总结
2015/03/30 职场文书
公司辞职信模板
2015/05/13 职场文书
可可西里观后感
2015/06/08 职场文书
给校长的建议书作文500字
2015/09/14 职场文书
python 常用的异步框架汇总整理
2021/06/18 Python