二叉树是树的简化版,除根节点之外的所有节点都有一个父节点,任意节点都可以最多有一个左子节点和右子节点。

二叉树的遍历是非常重要的算法,主要分为深度优先遍历和广度优先遍历。

其中深度优先遍历按照访问根节点和左右子节点的访问顺序,分为先根遍历(preorder),中根遍历(inorder)和后根遍历(postorder)。

顾名思义,先根遍历的访问原则是先访问根节点,然后左子节点,右子节点;

中根遍历的访问原则是先左子节点,然后根节点,最后右子节点;

后根遍历的访问原则是先左子节点,然后右子节点,最后根节点。

广度优先遍历(breadthfirst),就是像下面这样,访问完一层再访问下一层,如下:

闲言少叙,上代码:

import Queue

class Node:
def __init__(self,value=None,left=None,right=None):
self.value=value
self.left=left
self.right=right def preorder_trav(root):
if root==None:
return
print root.value
preorder_trav(root.left)
preorder_trav(root.right) def inorder_trav(root):
if root ==None:
return
inorder_trav(root.left)
print root.value
inorder_trav(root.right) def postorder_trav(root):
if root ==None:
return
postorder_trav(root.left)
postorder_trav(root.right)
print root.value def breadthfirst_trav(root):
# Create a queue and add the root node to it.
q=Queue.Queue()
q.put(root)
# Visit each node in the tree.
while not q.empty() :
# Remove the next node from the queue and visit it.
node = q.get()
print( node.value )
# Add the two children to the queue.
if node.left is not None :
q.put( node.left )
if node.right is not None :
q.put( node.right ) if __name__=='__main__':
root=Node('A',Node('B',Node('D'),Node('E')),Node('C',Node('F'),Node('G')))
print 'preorder_trav:'
preorder_trav(root)
print 'inorder_trav:'
inorder_trav(root)
print 'postorder_trav:'
postorder_trav(root)
print 'breadthfirst_trav:'
breadthfirst_trav(root)

二叉树的递归遍历代码看起来很简单,有点像伪代码,但功能很强大,非递归方法实现的就有点复杂了,等我研究明白再分享出来。

Python之二叉树Binarytree的更多相关文章

  1. Python实现二叉树的左中右序遍历

    #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/3/18 12:31 # @Author : baoshan # @Site ...

  2. 【DataStructure In Python】Python模拟二叉树

    使用Python模拟二叉树的基本操作,感觉写起来很别扭.最近做编译的优化,觉得拓扑排序这种东西比较强多.近期刷ACM,发现STL不会用实在太伤了.决定花点儿时间学习一下STL.Boost其实也很强大. ...

  3. Python实现二叉树的四种遍历

    对于一个没学过数据结构这门课程的编程菜鸟来说,自己能理解数据结构中的相关概念,但是自己动手通过Python,C++来实现它们却总感觉有些吃力.递归,指针,类这些知识点感觉自己应用的不够灵活,这是自己以 ...

  4. Python实现二叉树及其4种遍历

    Python & BinaryTree 1. BinaryTree (二叉树) 二叉树是有限个元素的集合,该集合或者为空.或者有一个称为根节点(root)的元素及两个互不相交的.分别被称为左子 ...

  5. Python数据结构——二叉树的实现

    1. 二叉树 二叉树(binary tree)中的每个节点都不能有多于两个的儿子. 1.1 二叉树列表实现 如上图的二叉树可用列表表示: tree=['A', #root ['B', #左子树 ['D ...

  6. python实现二叉树

    初学python,需要实现一个决策树,首先实践一下利用python实现一个二叉树数据结构.建树的时候做了处理,保证建立的二叉树是平衡二叉树. # -*- coding: utf-8 -*- from ...

  7. python 实现二叉树相关算法

    一.构建与遍历二叉树 基本性质 1)在二叉树的第i层上最多有2i-1 个节点 .(i>=1)2)二叉树中如果深度为k,那么最多有2k-1个节点.(k>=1)3)在完全二叉树中,具有n个节点 ...

  8. Python实现二叉树的前序、中序、后序、层次遍历

      有关树的理论部分描述:<数据结构与算法>-4-树与二叉树:   下面代码均基于python实现,包含: 二叉树的前序.中序.后序遍历的递归算法和非递归算法: 层次遍历: 由前序序列.中 ...

  9. python算法-二叉树广度优先遍历

    广度优先遍历:优先遍历兄弟节点,再遍历子节点 算法:通过队列实现-->先进先出 广度优先遍历的结果: 50,20,60,15,30,70,12 程序遍历这个二叉树: # encoding=utf ...

随机推荐

  1. IOS开源项目指标

    https://github.com/edagarli/open-ios-projects/blob/master/README.md 版权声明:本文博主原创文章,博客,未经同意不得转载.

  2. elasticsearch-jdbc

    jprante/elasticsearch-jdbc The Java Database Connection (JDBC) importer allows to fetch data from JD ...

  3. Hibernate综合问题

    n + 1问题 query.iterate()信息返回迭代查询将开始发表声明:录ID语句 Hibernate: select student0_.id ascol_0_0_from t_student ...

  4. QT之二级菜单(二级菜单的箭头可以使用QSS设置图片)

    QT之二级菜单 QT之二级菜单 开场白 效果图 上代码 可参考文章 下代码 结尾 开场白 今天我们一起来了解下,在我们QT中,二级菜单是如何实现的,在上篇我们学习了QT之系统托盘,QT之自定义菜单,  ...

  5. C#并发集合

    并发集合   并发集合 1 为什么使用并发集合? 原因主要有以下几点: System.Collections和System.Collections.Generic名称空间中所提供的经典列表.集合和数组 ...

  6. MyEclipse迅速

    MyEclipse迅速 1.详细例如以下图 2.提示原因 3.解决方案 版权声明:本文博主原创文章.博客,未经同意不得转载.

  7. 安装mysql5.7.17

    参见 网易云课堂的视频教程 :mysql视频教程

  8. c语言指针详细解释

    指针是C语言中广泛使用的一种数据类型. 运用指针编程是C语言最基本的风格之中的一个.利用指针变量能够表示各种数据结构: 能非常方便地使用数组和字符串: 并能象汇编语言一样处理内存地址,从而编出精练而高 ...

  9. crossplaform---Nodejs in Visual Studio Code 04.Swig模版

    1.开始 设置Node_Global:npm config set prefix "C:\Program Files\nodejs" Express组件:npm install e ...

  10. 【转】postgresql 9.4 在linux环境的安装步骤详解

    本文章来为各位介绍一篇关于postgresql 9.4 在linux环境的安装步骤详解,希望文章能够对各位新手朋友带来帮助的哦. 环境说明系统:centos 6.4 64位软件:postgresql ...