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实现的科学计算器功能示例
Aug 04 Python
Python调用ctypes使用C函数printf的方法
Aug 23 Python
在python3.5中使用OpenCV的实例讲解
Apr 02 Python
pandas 小数位数 精度的处理方法
Jun 09 Python
python使用knn实现特征向量分类
Dec 26 Python
python发送多人邮件没有展示收件人问题的解决方法
Jun 21 Python
深入了解Python枚举类型的相关知识
Jul 09 Python
Python 解码Base64 得到码流格式文本实例
Jan 09 Python
tensorflow多维张量计算实例
Feb 11 Python
Django如何继承AbstractUser扩展字段
Nov 27 Python
python3读取文件指定行的三种方法
May 24 Python
刚学完怎么用Python实现定时任务,转头就跑去撩妹!
Jun 05 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
编写漂亮的代码 - 将后台程序与前端程序分开
2008/04/23 PHP
php正则校验用户名介绍
2008/07/19 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(九)
2014/06/24 PHP
php进程间通讯实例分析
2016/07/11 PHP
PHP多维数组元素操作类的方法
2016/11/14 PHP
一个非常实用的php文件上传类
2017/07/04 PHP
input的focus方法使用
2010/03/13 Javascript
浅谈重写window对象的方法
2014/12/29 Javascript
基于Jquery实现仿百度百科右侧导航代码附源码下载
2015/11/27 Javascript
原生JavaScript实现Ajax的方法
2016/04/07 Javascript
js 将图片连接转换成base64格式的简单实例
2016/08/10 Javascript
Javascript农历与公历相互转换的简单实例
2016/10/09 Javascript
jQuery接受后台传递的List的实例详解
2017/08/02 jQuery
Node.js微信 access_token ( jsapi_ticket ) 存取与刷新的示例
2017/09/30 Javascript
JS实现将链接生成二维码并转为图片的方法
2018/03/17 Javascript
Vue.JS实现垂直方向展开、收缩不定高度模块的JS组件
2018/06/19 Javascript
Node.js中的不安全跳转如何防御详解
2018/10/21 Javascript
React降级配置及Ant Design配置详解
2018/12/27 Javascript
vue+element创建动态的form表单及动态生成表格的行和列
2019/05/20 Javascript
关于微信小程序map组件z-index的层级问题分析
2019/07/09 Javascript
[02:28]DOTA2英雄基础教程 灰烬之灵
2013/12/19 DOTA
[36:20]KG vs SECRET 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
python中django框架通过正则搜索页面上email地址的方法
2015/03/21 Python
python使用pil生成图片验证码的方法
2015/05/08 Python
Python之父谈Python的未来形式
2016/07/01 Python
python通过伪装头部数据抵抗反爬虫的实例
2018/05/07 Python
python交易记录链的实现过程详解
2019/07/03 Python
Python字典深浅拷贝与循环方式方法详解
2020/02/09 Python
python UDF 实现对csv批量md5加密操作
2021/01/01 Python
CSS3感应鼠标的背景闪烁和图片缩放动画效果
2014/05/14 HTML / CSS
橄榄树药房:OLIVEDA
2019/09/01 全球购物
镇创先争优活动总结
2014/08/28 职场文书
小学公民道德宣传日活动总结
2015/03/23 职场文书
企业宣传语大全
2015/07/13 职场文书
MySQL表的增删改查基础教程
2021/04/07 MySQL
分析JVM源码之Thread.interrupt系统级别线程打断
2021/06/29 Java/Android