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复制与引用用法分析
Apr 08 Python
python实现统计代码行数的方法
May 22 Python
基于python的字节编译详解
Sep 20 Python
python实现图像识别功能
Jan 29 Python
使用Django连接Mysql数据库步骤
Jan 15 Python
Python为何不能用可变对象作为默认参数的值
Jul 01 Python
python如何统计代码运行的时长
Jul 24 Python
浅析python中while循环和for循环
Nov 19 Python
np.newaxis 实现为 numpy.ndarray(多维数组)增加一个轴
Nov 30 Python
python3读取csv文件任意行列代码实例
Jan 13 Python
解决启动django,浏览器显示“服务器拒绝访问”的问题
May 13 Python
python3定位并识别图片验证码实现自动登录功能
Jan 29 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/03/14 PHP
php实现Mongodb自定义方式生成自增ID的方法
2015/03/23 PHP
php简单判断文本编码的方法
2015/07/30 PHP
Smarty模板简单配置与使用方法示例
2016/05/23 PHP
实例讲解YII2中多表关联的使用方法
2017/07/21 PHP
PHP实现的字符串匹配算法示例【sunday算法】
2017/12/19 PHP
Javascript UrlDecode函数代码
2010/01/09 Javascript
Jquery 插件学习实例1 插件制作说明与tableUI优化
2010/04/02 Javascript
基于PHP+Jquery制作的可编辑的表格的代码
2011/04/10 Javascript
基于jquery实现简单的分页控件
2016/03/17 Javascript
JS数组操作(数组增加、删除、翻转、转字符串、取索引、截取(切片)slice、剪接splice、数组合并)
2016/05/20 Javascript
Vue 固定头 固定列 点击表头可排序的表格组件
2016/11/25 Javascript
node.js 利用流实现读写同步,边读边写的方法
2017/09/11 Javascript
JavaScript实现打印星型金字塔功能实例分析
2017/09/27 Javascript
原生JavaScrpit中异步请求Ajax实现方法
2017/11/03 Javascript
jquery获取transform里的值实现方法
2017/12/12 jQuery
使用vue-route 的 beforeEach 实现导航守卫(路由跳转前验证登录)功能
2018/03/22 Javascript
JavaScript 跨域之POST实现方法
2018/05/07 Javascript
详解vue-cli+es6引入es5写的js(两种方法)
2019/04/19 Javascript
解析vue、angular深度作用选择器
2019/09/11 Javascript
解决$store.getters调用不执行的问题
2019/11/08 Javascript
100行代码实现vue表单校验功能(小白自编)
2019/11/19 Javascript
Vue中import from的来源及省略后缀与加载文件夹问题
2020/02/09 Javascript
JavaScript实现随机点名小程序
2020/10/29 Javascript
零基础写python爬虫之抓取百度贴吧并存储到本地txt文件改进版
2014/11/06 Python
Python实现的飞速中文网小说下载脚本
2015/04/23 Python
Python中使用items()方法返回字典元素对的教程
2015/05/21 Python
Python图像处理之gif动态图的解析与合成操作详解
2018/12/30 Python
python可视化爬虫界面之天气查询
2019/07/03 Python
PyQt5中向单元格添加控件的方法示例
2020/03/24 Python
Python气泡提示与标签的实现
2020/04/01 Python
Keras模型转成tensorflow的.pb操作
2020/07/06 Python
html5中localStorage本地存储的简单使用
2017/06/16 HTML / CSS
西班牙汉普顿小姐:购买帆布鞋和太阳镜
2016/10/23 全球购物
外科护士长工作总结
2015/08/12 职场文书
运动会班级口号霸气押韵
2015/12/24 职场文书