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

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

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

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

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

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

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

闲言少叙,上代码:

  1. import Queue
  2.  
  3. class Node:
  4. def __init__(self,value=None,left=None,right=None):
  5. self.value=value
  6. self.left=left
  7. self.right=right
  8.  
  9. def preorder_trav(root):
  10. if root==None:
  11. return
  12. print root.value
  13. preorder_trav(root.left)
  14. preorder_trav(root.right)
  15.  
  16. def inorder_trav(root):
  17. if root ==None:
  18. return
  19. inorder_trav(root.left)
  20. print root.value
  21. inorder_trav(root.right)
  22.  
  23. def postorder_trav(root):
  24. if root ==None:
  25. return
  26. postorder_trav(root.left)
  27. postorder_trav(root.right)
  28. print root.value
  29.  
  30. def breadthfirst_trav(root):
  31. # Create a queue and add the root node to it.
  32. q=Queue.Queue()
  33. q.put(root)
  34. # Visit each node in the tree.
  35. while not q.empty() :
  36. # Remove the next node from the queue and visit it.
  37. node = q.get()
  38. print( node.value )
  39. # Add the two children to the queue.
  40. if node.left is not None :
  41. q.put( node.left )
  42. if node.right is not None :
  43. q.put( node.right )
  44.  
  45. if __name__=='__main__':
  46. root=Node('A',Node('B',Node('D'),Node('E')),Node('C',Node('F'),Node('G')))
  47. print 'preorder_trav:'
  48. preorder_trav(root)
  49. print 'inorder_trav:'
  50. inorder_trav(root)
  51. print 'postorder_trav:'
  52. postorder_trav(root)
  53. print 'breadthfirst_trav:'
  54. 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. WSL探索及WSLAPI调用记录

    以前都是在虚拟机上安装linux,居然刚知道win10有WSL(Windows Subsystem for Linux)可以直接在win10上安装linux,消耗低,效率高,很赞,趁着干兴趣把WSL探 ...

  2. 自己动手编写一个VS插件(五)

    作者:朱金灿 来源:http://blog.csdn.net/clever101 继续编写VisualStudio插件.这次我编写的插件叫DevAssist(意思是开发助手).在看了前面的文章之后你知 ...

  3. 浏览器兼容性之ECMAScript

    1 IE中不能操作TR标签的innnerHTML. 2 日期处理函数不一致. (1)IE 8- new Date().getYear()返回的是到当前日期到1900年的差值,FF返回的是当前的年. ( ...

  4. Matlab Tricks(二十八)—— 笛卡尔积的实现

    笛卡尔积在数学上是一种二元关系,笛卡尔积作用的双方是两个集合,作用的结果是一个新的集合. A×B={(a,b)|a∈Aandb∈B} 现有两向量: >> p = [1, 5, 10]; & ...

  5. UVA 548(二进制重建和遍历)

    J - Tree Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Status Ap ...

  6. 整了一天,明白一个道理:线程里post数据,即loop.exec+quit,然而这个quit之后,导致无法在线程里建立新的loop.exec,直接就退出了

    跟踪到exec的代码里,发现: 无奈,把第二个post移到主线程里去执行了. 如果大家发现有好办法,请告知我.

  7. 使用WPF实现3D场景[一]

    原文:使用WPF实现3D场景[一] 在这篇文章里,将介绍如何实现一个简单的三维场景,一个三维的空间,包括空间内的三维物体的组合. 首先介绍一下一个三维场景里的基本元素: 先是定义一个简单的三维的场景环 ...

  8. mysqldump 定时备份数据(全量)

    MYSQL 数据库备份有很多种(cp.tar.lvm2.mysqldump.xtarbackup)等等,具体使用哪一个还要看你的数据规模.下面给出一个表 #摘自<学会用各种姿态备份Mysql数据 ...

  9. XP双网卡不能上网的问题

    转载. 现在很多本本都是双网卡配置,让两个网卡分别负责连接内外网能够加快上网速度和连接稳定,但不少网友照做后会出现无法上网的情况,这是由于默认网关冲突所导致的.那么该如何处理让双网卡各行其是,互不干扰 ...

  10. 【Linux知识】server性能测试--UnixBench

    链接地址: http://blog.csdn.net/jason_asia/article/details/38309079 1.1.   server性能测试UnixBench 分别DELL R72 ...