python实现的二叉树定义与遍历算法实例

 更新时间:2017年06月30日 10:09:09   作者:ZHOU YANG  
这篇文章主要介绍了python实现的二叉树定义与遍历算法,结合具体实例形式分析了基于Python定义的二叉树及其常用遍历操作实现技巧,需要的朋友可以参考下

本文实例讲述了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

建立的二叉树如下图所示:

PS:作者的github: https://github.com/zhoudayang

更多关于Python相关内容可查看本站专题:《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总

希望本文所述对大家Python程序设计有所帮助。

相关文章

  • python读写csv文件并增加行列的实例代码

    python读写csv文件并增加行列的实例代码

    这篇文章主要介绍了python读写csv文件并增加行列的实现方法,文中给大家介绍了python写入csv文件的几种方法总结,给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-08-08
  • Python零基础入门学习之输入与输出

    Python零基础入门学习之输入与输出

    在之前的编程中,我们的信息打印,数据的展示都是在控制台(命令行)直接输出的,信息都是一次性的没有办法复用和保存以便下次查看,今天我们将学习Python的输入输出,解决以上问题
    2019-04-04
  • 安装pytorch报错torch.cuda.is_available()=false问题的解决过程

    安装pytorch报错torch.cuda.is_available()=false问题的解决过程

    最近想用pytorch,因此装了pytorch,但是碰到了问题,下面这篇文章主要给大家介绍了关于安装pytorch报错torch.cuda.is_available()=false问题的解决过程,需要的朋友可以参考下
    2022-05-05
  • Python使用pandas实现对数据进行特定排序

    Python使用pandas实现对数据进行特定排序

    在数据分析和处理过程中,排序是一项常见而重要的操作,本文将详细介绍如何利用pandas对数据进行特定排序,包括基本排序、多列排序、自定义排序规则等方面的内容,需要的可以了解下
    2024-03-03
  • Python中的切片函数Slice详解

    Python中的切片函数Slice详解

    这篇文章主要介绍了Python中的切片函数Slice详解,切片是对有序的集合而言,意思从有序集合里提取数据构成子集集合,给定提取的起点start、终点end以及方向上的步长step,能否切出非空子集,起点start需能沿步长方向上到达终点,需要的朋友可以参考下
    2023-09-09
  • 详解Python中xlsxwriter库的基本操作

    详解Python中xlsxwriter库的基本操作

    xlsxwriter是一个用于创建和修改Excel文件(.xlsx)的Python库,它提供了丰富的功能,可以创建复杂的Excel工作簿,本文为大家介绍了它的一些基本操作,希望对大家有所帮助
    2023-11-11
  • python中异常报错处理方法汇总

    python中异常报错处理方法汇总

    之前在学习python的时候有整理过python异常处理的文章,不够简单也不够完整,所以决定再整理一篇,算做补充,大家学习一下,就可以自己思考解决方法了,希望对大家能够有所帮助
    2016-11-11
  • 使用python将多个excel文件合并到同一个文件的方法

    使用python将多个excel文件合并到同一个文件的方法

    这篇文章主要介绍了使用python将多个excel文件合并到同一个文件的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • python3使用QQ邮箱发送邮件

    python3使用QQ邮箱发送邮件

    这篇文章主要为大家详细介绍了python3使用QQ邮箱发邮件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • python实现查询苹果手机维修进度

    python实现查询苹果手机维修进度

    这篇文章主要介绍了python实现查询苹果手机维修进度,这里用到了最重要的一个知识是python中如何设置cookie支持以及开启调试模式,需要的朋友可以参考下
    2015-03-03

最新评论