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之使用Python查询更新数据库
Nov 25 Python
python实现从网络下载文件并获得文件大小及类型的方法
Apr 28 Python
用Python编写web API的教程
Apr 30 Python
Pandas标记删除重复记录的方法
Apr 08 Python
详解python分布式进程
Oct 08 Python
win7 x64系统中安装Scrapy的方法
Nov 18 Python
python 实现倒排索引的方法
Dec 25 Python
python实现两个文件夹的同步
Aug 29 Python
PyCharm中配置PySide2的图文教程
Jun 18 Python
jupyter notebook指定启动目录的方法
Mar 02 Python
pycharm2021激活码使用教程(永久激活亲测可用)
Mar 30 Python
Python可视化学习之seaborn调色盘
Feb 24 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 GD 图像处理组件的常用函数总结
2010/04/28 PHP
php.ini中date.timezone设置分析
2011/07/29 PHP
Zend Framework入门应用实例详解
2016/12/11 PHP
laravel中的一些简单实用功能
2018/11/03 PHP
自动设置iframe大小的jQuery代码
2013/09/11 Javascript
jquery左边浮动到一定位置时显示返回顶部按钮
2014/06/05 Javascript
JavaScript onkeypress事件入门实例(按下或按住一个键盘按键)
2014/10/17 Javascript
javascript使用prototype完成单继承
2014/12/24 Javascript
jQuery选择器querySelector的使用指南
2015/01/23 Javascript
JS两种类型的表单提交方法实例分析
2016/11/28 Javascript
详解AngularJS 模块化
2017/06/14 Javascript
JavaScript编程设计模式之观察者模式(Observer Pattern)实例详解
2017/10/25 Javascript
Vue中对iframe实现keep alive无刷新的方法
2019/07/23 Javascript
layer弹出层自定义提交取消按钮的例子
2019/09/10 Javascript
jQuery编写QQ简易聊天框
2020/08/27 jQuery
python中is与双等于号“==”的区别示例详解
2017/11/21 Python
pandas实现将dataframe满足某一条件的值选出
2019/06/12 Python
Python实用工具FuckIt.py介绍
2019/07/02 Python
python中break、continue 、exit() 、pass终止循环的区别详解
2019/07/08 Python
python 读取二进制 显示图片案例
2020/04/24 Python
CSS3弹性盒模型开发笔记(三)
2016/04/26 HTML / CSS
Html5中localStorage存储JSON数据并读取JSON数据的实现方法
2017/02/13 HTML / CSS
美国在线鲜花速递:ProFlowers
2017/01/05 全球购物
翻新二手苹果产品的网络领导者:Mac of all Trades
2017/12/19 全球购物
优秀演讲稿范文
2013/12/29 职场文书
新领导上任欢迎词
2014/01/13 职场文书
年会活动策划方案
2014/01/23 职场文书
租房协议书怎么写
2014/04/10 职场文书
光学与应用专业毕业生求职信
2014/09/01 职场文书
国家机关领导干部民主生活会对照检查材料思想汇报
2014/09/17 职场文书
单位一把手群众路线四风问题整改措施
2014/09/25 职场文书
2015大学生自我评价范文
2015/03/03 职场文书
2015年人事科工作总结
2015/04/28 职场文书
历史名人教你十五个读书方法,赶快Get起来!
2019/07/18 职场文书
创业计划书之少年玩具店
2019/09/05 职场文书
Nginx解决403 forbidden的完整步骤
2021/04/01 Servers