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的Supervisor进行进程监控以及自动启动
May 29 Python
python编写简单爬虫资料汇总
Mar 22 Python
python装饰器-限制函数调用次数的方法(10s调用一次)
Apr 21 Python
django 实现电子支付功能的示例代码
Jul 25 Python
Python3 max()函数基础用法
Feb 19 Python
python自动化之Ansible的安装教程
Jun 13 Python
Python PO设计模式的具体使用
Aug 16 Python
详解基于python的多张不同宽高图片拼接成大图
Sep 26 Python
Python字节单位转换实例
Dec 05 Python
基于Numba提高python运行效率过程解析
Mar 02 Python
如何使用PyCharm将代码上传到GitHub上(图文详解)
Apr 27 Python
python 机器学习的标准化、归一化、正则化、离散化和白化
Apr 16 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中的比较运算符详解
2013/10/28 PHP
php使用ereg验证文件上传的方法
2014/12/16 PHP
Thinkphp3.2.3整合phpqrcode生成带logo的二维码
2016/07/21 PHP
php集成动态口令认证
2016/07/21 PHP
发一个自己用JS写的实用看图工具实现代码
2008/07/26 Javascript
JS对URL字符串进行编码/解码分析
2008/10/25 Javascript
javascript获取当前ip的代码
2009/05/10 Javascript
jQuery 1.3 和 Validation 验证插件1.5.1
2009/07/09 Javascript
颜色选择器 Color Picker,IE,Firefox,Opera,Safar
2010/11/25 Javascript
jQuery EasyUI API 中文文档 - Dialog对话框
2011/11/15 Javascript
jquery不会自动回收xmlHttpRequest对象 导致了内存溢出
2012/06/18 Javascript
javascript 文件的同步加载与异步加载实现原理
2012/12/13 Javascript
JQuery插件ajaxfileupload.js异步上传文件实例
2015/05/19 Javascript
JavaScript中exec函数用法实例分析
2015/06/08 Javascript
JavaScript编程中window的location与history对象详解
2015/10/26 Javascript
jQuery Validate表单验证插件 添加class属性形式的校验
2016/01/18 Javascript
javascript每日必学之运算符
2016/02/16 Javascript
Google Maps基础及实例解析
2016/08/06 Javascript
使用vue和datatables进行表格的服务器端分页实例代码
2017/06/07 Javascript
详解nodejs实现本地上传图片并预览功能(express4.0+)
2017/06/28 NodeJs
ActiveX控件的使用-js实现打印超市小票功能代码详解
2017/11/22 Javascript
[01:50]《我与DAC》之玩家:iG夺冠时的那面红旗
2018/03/29 DOTA
Python中对元组和列表按条件进行排序的方法示例
2015/11/10 Python
python Pygame的具体使用讲解
2017/11/03 Python
Python学生成绩管理系统简洁版
2020/04/05 Python
儿童学习python的一些小技巧
2018/05/27 Python
基于python中theano库的线性回归
2018/08/31 Python
pycharm中成功运行图片的配置教程
2018/10/28 Python
Python实现九宫格式的朋友圈功能内附“马云”朋友圈
2019/05/07 Python
Python实现通过解析域名获取ip地址的方法分析
2019/05/17 Python
使用 Python 写一个简易的抽奖程序
2019/12/08 Python
python实现ftp文件传输系统(案例分析)
2020/03/20 Python
windows10在visual studio2019下配置使用openCV4.3.0
2020/07/14 Python
地理教师岗位职责
2014/03/16 职场文书
小学生作文评语集锦
2014/12/25 职场文书
一次Mysql update sql不当引起的生产故障记录
2022/04/01 MySQL