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通过递归遍历出集合中所有元素的方法
Feb 25 Python
深入了解Python数据类型之列表
Jun 24 Python
Python列表切片操作实例总结
Feb 19 Python
Python3.5多进程原理与用法实例分析
Apr 05 Python
用Python实现最速下降法求极值的方法
Jul 10 Python
flask框架配置mysql数据库操作详解
Nov 29 Python
记录模型训练时loss值的变化情况
Jun 16 Python
Tensorflow与Keras自适应使用显存方式
Jun 22 Python
Python gevent协程切换实现详解
Sep 14 Python
python代数式括号有效性检验示例代码
Oct 04 Python
Django cookie和session的应用场景及如何使用
Apr 29 Python
详解Go语言运用广度优先搜索走迷宫
Jun 23 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获取百度收录、百度热词及百度快照的方法
2015/04/02 PHP
Yii视图CGridView列表用法实例分析
2016/07/12 PHP
php设计模式之策略模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
当jQuery遭遇CoffeeScript的时候 使用分享
2011/09/17 Javascript
Jquery为a标签的href赋值实现代码
2013/05/03 Javascript
JS定时刷新页面及跳转页面的方法
2013/07/04 Javascript
js实现动态改变字体大小代码
2014/01/02 Javascript
JQuery EasyUI 数字格式化处理示例
2014/05/05 Javascript
js 获取页面高度和宽度兼容 ie firefox chrome等
2014/05/14 Javascript
jquery插件jSignature实现手动签名
2015/05/04 Javascript
纯js代码实现未知宽高的元素在指定元素中垂直水平居中显示
2015/09/12 Javascript
整理JavaScript创建对象的八种方法
2015/11/03 Javascript
开源免费天气预报接口API及全国所有地区代码(国家气象局提供)
2016/12/26 Javascript
nodejs制作爬虫实现批量下载图片
2017/05/19 NodeJs
bootstrap table插件的分页与checkbox使用详解
2017/07/23 Javascript
基于jQuery实现图片推拉门动画效果的两种方法
2017/08/26 jQuery
element-ui表格列金额显示两位小数的方法
2018/08/24 Javascript
vue点击自增和求和的实例代码
2019/11/06 Javascript
微信小程序服务器日期格式化问题
2020/01/07 Javascript
node.js使用yargs处理命令行参数操作示例
2020/02/11 Javascript
Python环境下搭建属于自己的pip源的教程
2016/05/05 Python
浅谈Python的方法解析顺序(MRO)
2020/03/05 Python
Python如何重新加载模块
2020/07/29 Python
python爬虫中PhantomJS加载页面的实例方法
2020/11/12 Python
高中生的学习总结自我鉴定
2013/10/26 职场文书
小学教师岗位职责
2013/11/25 职场文书
20年同学聚会感言
2014/02/03 职场文书
小学生节约用水倡议书
2014/05/15 职场文书
先进基层党组织事迹材料
2014/12/25 职场文书
2015年客服工作总结范文
2015/04/02 职场文书
房屋维修申请报告
2015/05/18 职场文书
分享:关于学习的励志名言赏析
2019/08/16 职场文书
Python 中的Sympy详细使用
2021/08/07 Python
SQL Server表分区删除详情
2021/10/16 SQL Server
微信小程序中使用vant框架的具体步骤
2022/02/18 Javascript
Java GUI编程菜单组件实例详解
2022/04/07 Java/Android