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 list语法学习(带例子)
Nov 01 Python
Python tkinter事件高级用法实例
Jan 31 Python
python实现多线程网页下载器
Apr 15 Python
详解python之协程gevent模块
Jun 14 Python
Python如何使用OS模块调用cmd
Feb 27 Python
Python3 pickle对象串行化代码实例解析
Mar 23 Python
PythonPC客户端自动化实现原理(pywinauto)
May 28 Python
opencv 图像滤波(均值,方框,高斯,中值)
Jul 08 Python
OpenCV图片漫画效果的实现示例
Aug 18 Python
解决Windows下python和pip命令无法使用的问题
Aug 31 Python
Python用dilb提取照片上人脸的示例
Oct 26 Python
python+opencv实现目标跟踪过程
Jun 21 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 Ajax实现页面无刷新发表评论
2007/01/02 PHP
使用apache模块rewrite_module (转)
2007/02/14 PHP
php 页面执行时间计算代码
2008/12/04 PHP
基于php和mysql的简单的dao类实现crud操作功能
2014/01/27 PHP
PHP图片裁剪函数(保持图像不变形)
2014/05/04 PHP
调用DOM对象的focus使文本框获得焦点
2014/02/19 Javascript
使用JavaScript判断图片是否加载完成的三种实现方式
2014/05/04 Javascript
使用node.js 获取客户端信息代码分享
2014/11/26 Javascript
node.js中的fs.unlink方法使用说明
2014/12/15 Javascript
基于nodejs+express4.X实现文件下载的实例代码
2017/07/13 NodeJs
Angular js 实现添加用户、修改密码、敏感字、下拉菜单的综合操作方法
2017/10/24 Javascript
微信小程序支付前端源码
2018/08/29 Javascript
vue-cli3.0使用及部分配置详解
2018/08/29 Javascript
vue-cli 3.0 自定义vue.config.js文件,多页构建的方法
2018/09/19 Javascript
解决vuex数据异步造成初始化的时候没值报错问题
2019/11/13 Javascript
Angular value与ngValue区别详解
2019/11/27 Javascript
vue keep-alive实现多组件嵌套中个别组件存活不销毁的操作
2020/10/30 Javascript
[01:00:22]DOTA2-DPC中国联赛定级赛 LBZS vs Magma BO3第三场 1月10日
2021/03/11 DOTA
python生成随机图形验证码详解
2017/11/08 Python
python 通过SSHTunnelForwarder隧道连接redis的方法
2019/02/19 Python
PyCharm搭建Spark开发环境实现第一个pyspark程序
2019/06/13 Python
Python实现将蓝底照片转化为白底照片功能完整实例
2019/12/13 Python
基于css3仿造window7的开始菜单
2010/06/17 HTML / CSS
CSS3实现内凹圆角的实例代码
2017/05/04 HTML / CSS
利用html5 canvas动态画饼状图的示例代码
2018/04/02 HTML / CSS
草莓巧克力:Shari’s Berries
2017/02/07 全球购物
为您搜罗全球潮流時尚品牌:HBX
2019/12/04 全球购物
Tessabit美国:集世界奢侈品和设计师品牌的意大利精品买手店
2020/06/29 全球购物
博士生入学考试推荐信
2013/11/17 职场文书
数学教学随笔感言
2014/02/17 职场文书
中班开学寄语
2014/04/04 职场文书
师范毕业生求职信
2014/07/11 职场文书
拔河比赛新闻稿
2015/07/17 职场文书
python实现批量提取指定文件夹下同类型文件
2021/04/05 Python
MybatisPlus代码生成器的使用方法详解
2021/06/13 Java/Android
Python Matplotlib绘制两个Y轴图像
2022/04/13 Python