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中使用PIPE操作Linux管道
Feb 04 Python
Python中type的构造函数参数含义说明
Jun 21 Python
自动化Nginx服务器的反向代理的配置方法
Jun 28 Python
Python-嵌套列表list的全面解析
Jun 08 Python
Python数据分析之真实IP请求Pandas详解
Nov 18 Python
python之Flask实现简单登录功能的示例代码
Dec 24 Python
python 实现返回一个列表中出现次数最多的元素方法
Jun 11 Python
Python当中的array数组对象实例详解
Jun 12 Python
PyQt5下拉式复选框QComboCheckBox的实例
Jun 25 Python
mac在matplotlib中显示中文的操作方法
Mar 06 Python
Django import export实现数据库导入导出方式
Apr 03 Python
python 实现客户端与服务端的通信
Dec 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
要会喝咖啡也要会知道咖啡豆
2021/03/03 咖啡文化
php判断访问IP的方法
2015/06/19 PHP
Javascript Math对象
2009/08/13 Javascript
Jquery的hover方法让鼠标经过li时背景变色
2013/09/06 Javascript
node.js中的http.response.addTrailers方法使用说明
2014/12/14 Javascript
javascript如何实现暂停功能
2015/11/06 Javascript
Bootstrap每天必学之滚动监听
2016/03/16 Javascript
JavaScript Promise 用法
2016/06/14 Javascript
json对象与数组以及转换成js对象的简单实现方法
2016/06/24 Javascript
React Native实现简单的登录功能(推荐)
2016/09/19 Javascript
Javascript单例模式的介绍和实例
2016/10/08 Javascript
JavaScript模仿Pinterest实现图片预加载功能
2016/10/25 Javascript
深入理解JavaScript中的预解析
2017/01/04 Javascript
[原创]SyntaxHighlighter自动识别并加载脚本语言
2017/02/07 Javascript
Vue 2.0中生命周期与钩子函数的一些理解
2017/05/09 Javascript
AngularJs+Bootstrap实现漂亮的计算器
2017/08/10 Javascript
原生js实现html手机端城市列表索引选择城市
2020/06/24 Javascript
[02:09]DOTA2辉夜杯 EHOME夺冠举杯现场
2015/12/28 DOTA
python目录操作之python遍历文件夹后将结果存储为xml
2014/01/27 Python
Python单例模式实例分析
2015/01/14 Python
python连接数据库的方法
2017/10/19 Python
scrapy爬虫实例分享
2017/12/28 Python
python生成tensorflow输入输出的图像格式的方法
2018/02/12 Python
Python2包含中文报错的解决方法
2018/07/09 Python
python文档字符串(函数使用说明)使用详解
2019/07/30 Python
pytorch中如何使用DataLoader对数据集进行批处理的方法
2019/08/06 Python
10 套华丽的CSS3 按钮小结
2012/10/03 HTML / CSS
Gerry Weber德国官网:优质女性时装,德国最大的时装公司之一
2019/11/02 全球购物
机械专业应届生求职信
2013/12/12 职场文书
好书伴我成长演讲稿
2014/05/14 职场文书
伦敦奥运会口号
2014/06/13 职场文书
刑事辩护授权委托书范本
2014/10/17 职场文书
向女朋友道歉的话
2015/01/20 职场文书
感谢信格式范文
2015/01/22 职场文书
Golang原生rpc(rpc服务端源码解读)
2022/04/07 Golang
CSS使用Flex和Grid布局实现3D骰子
2022/08/05 HTML / CSS