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 12 Python
Python中的复制操作及copy模块中的浅拷贝与深拷贝方法
Jul 02 Python
Python IDLE清空窗口的实例
Jun 25 Python
python读写LMDB文件的方法
Jul 02 Python
python中将两组数据放在一起按照某一固定顺序shuffle的实例
Jul 15 Python
python3实现弹弹球小游戏
Nov 25 Python
Python中bisect的使用方法
Dec 31 Python
Python字符串对齐方法使用(ljust()、rjust()和center())
Apr 26 Python
python Django框架快速入门教程(后台管理)
Jul 21 Python
Python初识逻辑与if语句及用法大全
Aug 07 Python
Python实现照片卡通化
Dec 06 Python
Python爬虫 简单介绍一下Xpath及使用
Apr 26 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获取当前url地址的方法小结
2017/01/10 PHP
浅谈PHP中new self()和new static()的区别
2017/08/11 PHP
PHP通过bypass disable functions执行系统命令的方法汇总
2018/05/02 PHP
PHP智能识别收货地址信息实例
2019/01/05 PHP
浏览器无法运行JAVA脚本的解决方法
2008/01/09 Javascript
js左右弹性滚动对联广告代码分享
2014/02/19 Javascript
[原创]推荐10款最热门jQuery UI框架
2014/08/19 Javascript
cocos2dx骨骼动画Armature源码剖析(一)
2015/09/08 Javascript
JS实现仿雅虎首页快捷登录入口及导航模块效果
2015/09/19 Javascript
js实现图片无缝滚动
2015/12/23 Javascript
Bootstrap入门书籍之(三)栅格系统
2016/02/17 Javascript
使用JS轻松实现ionic调用键盘搜索功能(超实用)
2016/09/06 Javascript
解决html input验证只能输入数字,不能输入其他的问题
2017/07/21 Javascript
基于jQuery解决ios10以上版本缩放问题
2017/11/03 jQuery
使用vue-cli创建项目的图文教程(新手入门篇)
2018/05/02 Javascript
JS实现的视频弹幕效果示例
2018/08/17 Javascript
js中比较两个对象是否相同的方法示例
2019/09/02 Javascript
深入浅出vue图片路径的实现
2019/09/04 Javascript
vuex刷新后数据丢失的解决方法
2020/10/18 Javascript
python文件和目录操作函数小结
2014/07/11 Python
python 对类的成员函数开启线程的方法
2019/01/22 Python
Python正则表达式和re库知识点总结
2019/02/11 Python
你不知道的葡萄干处理法、橙蜜处理法、二氧化碳酵母法
2021/03/17 冲泡冲煮
CSS3正方体旋转示例代码
2013/08/08 HTML / CSS
HTML5中的音频和视频媒体播放元素小结
2016/01/29 HTML / CSS
TobyDeals美国:在电子产品上获得最好的优惠和折扣
2019/08/11 全球购物
Java里面Pass by value和Pass by Reference是什么意思
2016/05/02 面试题
软件工程专业推荐信
2013/10/28 职场文书
出纳工作岗位责任制
2014/02/02 职场文书
人力资源经理的岗位职责
2014/03/02 职场文书
2014年德育工作总结
2014/11/20 职场文书
2015年元旦文艺晚会总结(学院)
2014/11/28 职场文书
公司优秀员工推荐信
2015/03/24 职场文书
python自动计算图像数据集的RGB均值
2021/06/18 Python
关于mysql中时间日期类型和字符串类型的选择
2021/11/27 MySQL
JavaScript中10个Reduce常用场景技巧
2022/06/21 Javascript