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中read()、readline()和readlines()三者间的区别和用法
Jul 30 Python
Python绑定方法与非绑定方法详解
Aug 18 Python
python模块之paramiko实例代码
Jan 31 Python
对Python中type打开文件的方式介绍
Apr 28 Python
在windows下Python打印彩色字体的方法
May 15 Python
程序员写Python时的5个坏习惯,你有几条?
Nov 26 Python
对python opencv 添加文字 cv2.putText 的各参数介绍
Dec 05 Python
Python中新式类与经典类的区别详析
Jul 10 Python
Python3 chardet模块查看编码格式的例子
Aug 14 Python
python super的使用方法及实例详解
Sep 25 Python
python配置文件写入过程详解
Oct 19 Python
python 遗传算法求函数极值的实现代码
Feb 11 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 从数据库提取二进制图片的处理代码
2009/09/09 PHP
php读取excel文件的简单实例
2013/08/26 PHP
ThinkPHP3.1新特性之多数据库操作更加完善
2014/06/19 PHP
PHP获取文件夹内文件数的方法
2015/03/12 PHP
Laravel 的数据库迁移的方法
2017/07/31 PHP
php7连接MySQL实现简易查询程序的方法
2020/10/13 PHP
JS关键字变色实现思路及代码
2013/02/21 Javascript
两种方法实现文本框输入内容提示消失
2013/03/17 Javascript
JS图片切换的具体方法(带缩略图版)
2013/11/12 Javascript
Javascript 绘制 sin 曲线过程附图
2014/08/21 Javascript
JavaScript数组函数unshift、shift、pop、push使用实例
2014/08/27 Javascript
Spring mvc 接收json对象
2015/12/10 Javascript
js判断当前页面用什么浏览器打开的方法
2016/01/06 Javascript
js时间戳和c#时间戳互转方法(推荐)
2017/02/15 Javascript
Vue2.0父子组件传递函数的教程详解
2017/10/16 Javascript
JS实现的找零张数最小问题示例
2017/11/28 Javascript
JavaScript实现的开关灯泡点击切换特效示例
2019/07/08 Javascript
Javascript中的this,bind和that使用实例
2019/12/05 Javascript
python实现批量改文件名称的方法
2015/05/25 Python
Pandas:DataFrame对象的基础操作方法
2018/06/07 Python
python and or用法详解
2019/06/26 Python
Python log模块logging记录打印用法解析
2020/01/20 Python
Python装饰器用法与知识点小结
2020/03/09 Python
如何理解Python中的变量
2020/06/01 Python
白酒业务员岗位职责
2013/12/27 职场文书
房地产财务部员工岗位职责
2014/03/12 职场文书
公司委托书怎么写
2014/08/02 职场文书
师德师风学习材料
2014/12/19 职场文书
万能检讨书开头与结尾怎么写
2015/02/17 职场文书
话题作文之诚信
2019/11/28 职场文书
详细了解MVC+proxy
2021/07/09 Java/Android
SQL Server表分区删除详情
2021/10/16 SQL Server
2021年国产动漫公司排行前十名,玄机科技上榜,第二推出过铠甲勇士
2022/03/18 杂记
Golang日志包的使用
2022/04/20 Golang
JS实现九宫格拼图游戏
2022/06/28 Javascript
浅谈音视频 pts dts基本概念及理解
2022/08/05 数码科技