python实现树的深度优先遍历与广度优先遍历详解


Posted in Python onOctober 26, 2019

本文实例讲述了python实现树的深度优先遍历与广度优先遍历。分享给大家供大家参考,具体如下:

广度优先(层次遍历)

从树的root开始,从上到下从左到右遍历整个树的节点

python实现树的深度优先遍历与广度优先遍历详解

数和二叉树的区别就是,二叉树只有左右两个节点

广度优先 顺序:A - B - C - D - E - F - G - H - I

代码实现

def breadth_travel(self, root):
    """利用队列实现树的层次遍历"""
    if root == None:
      return
    queue = []
    queue.append(root)
    while queue:
      node = queue.pop(0)
      print node.elem,
      if node.lchild != None:
        queue.append(node.lchild)
      if node.rchild != None:
        queue.append(node.rchild)

深度优先

深度优先有三种算法:前序遍历,中序遍历,后序遍历

python实现树的深度优先遍历与广度优先遍历详解

先序遍历 在先序遍历中,我们先访问根节点,然后递归使用先序遍历访问左子树,再递归使用先序遍历访问右子树

根节点->左子树->右子树

#实现 1
 def preorder(self, root):
    """递归实现先序遍历"""
    if root == None:
      return
    print root.elem
    self.preorder(root.lchild)
    self.preorder(root.rchild)
#实现 2
 def depth_tree(tree_node):
   if tree_node is not None:
     print (tree_node._data)
     if tree_node._left is noe None:
       return depth_tree(tree_node._left)
     if tree_node._right is not None:
       return depth_tree(tree_node._right)

中序遍历 在中序遍历中,我们递归使用中序遍历访问左子树,然后访问根节点,最后再递归使用中序遍历访问右子树

左子树->根节点->右子树

def inorder(self, root):
   """递归实现中序遍历"""
   if root == None:
     return
   self.inorder(root.lchild)
   print root.elem
   self.inorder(root.rchild)

后序遍历 在后序遍历中,我们先递归使用后序遍历访问左子树和右子树,最后访问根节点

左子树->右子树->根节点

def postorder(self, root):
   """递归实现后续遍历"""
   if root == None:
     return
   self.postorder(root.lchild)
   self.postorder(root.rchild)
   print root.elem

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

Python 相关文章推荐
Flask入门教程实例:搭建一个静态博客
Mar 27 Python
git使用.gitignore设置不生效或不起作用问题的解决方法
Jun 01 Python
Python实现修改文件内容的方法分析
Mar 25 Python
一些Centos Python 生产环境的部署命令(推荐)
May 07 Python
使用NumPy和pandas对CSV文件进行写操作的实例
Jun 14 Python
Django 实现购物车功能的示例代码
Oct 08 Python
python实现二维插值的三维显示
Dec 17 Python
详解django实现自定义manage命令的扩展
Aug 13 Python
python多线程同步之文件读写控制
Feb 25 Python
django教程如何自学
Jul 31 Python
python+opencv3.4.0 实现HOG+SVM行人检测的示例代码
Jan 28 Python
Python的代理类实现,控制访问和修改属性的权限你都了解吗
Mar 21 Python
python图的深度优先和广度优先算法实例分析
Oct 26 #Python
python单例模式原理与创建方法实例分析
Oct 26 #Python
Python aiohttp百万并发极限测试实例分析
Oct 26 #Python
python实现淘宝购物系统
Oct 25 #Python
DJANGO-URL反向解析REVERSE实例讲解
Oct 25 #Python
python计算n的阶乘的方法代码
Oct 25 #Python
Python OrderedDict的使用案例解析
Oct 25 #Python
You might like
PHP 程序员应该使用的10个组件
2009/10/31 PHP
PHP的范围解析操作符(::)的含义分析说明
2011/07/03 PHP
PHP类的静态(static)方法和静态(static)变量使用介绍
2012/02/19 PHP
php如何解决无法上传大于8M的文件问题
2014/03/10 PHP
PHP抽奖算法程序代码分享
2015/10/08 PHP
PHP抓取及分析网页的方法详解
2016/04/26 PHP
PHP快速排序quicksort实例详解
2016/09/28 PHP
laravel清除视图缓存的代码
2019/10/23 PHP
javascript:void(0)的真正含义实例分析
2008/08/20 Javascript
学习ExtJS Panel常用方法
2009/10/07 Javascript
Javascript中的delete介绍
2012/09/02 Javascript
表单的焦点顺序tabindex和对应enter键提交
2013/01/04 Javascript
jQuery关于导航条背景切换效果实现示例
2013/09/04 Javascript
Nodejs实现批量下载妹纸图
2015/05/28 NodeJs
JQuery中Ajax()的data参数类型实例分析
2015/12/15 Javascript
基于JavaScript实现鼠标向下滑动加载div的代码
2016/08/31 Javascript
JavaScript使用ZeroClipboard操作剪切板
2017/05/10 Javascript
JavaScript监听手机物理返回键的两种解决方法
2017/08/14 Javascript
layui table设置前台过滤转义等方法
2018/08/17 Javascript
解决vue 引入子组件报错的问题
2018/09/06 Javascript
angular学习之动态创建表单的方法
2018/12/07 Javascript
Vue路由之JWT身份认证的实现方法
2019/08/26 Javascript
了不起的11个JavaScript代码重构最佳实践小结
2021/01/11 Javascript
Django 接收Post请求数据,并保存到数据库的实现方法
2019/07/12 Python
python数值基础知识浅析
2019/11/19 Python
Python 操作 MySQL数据库
2020/09/18 Python
python之openpyxl模块的安装和基本用法(excel管理)
2021/02/03 Python
荷兰和比利时时尚鞋店:Van Dalen
2018/04/23 全球购物
美丽的现代设计家具:2Modern
2018/07/26 全球购物
艺术设计专业个人求职信范文
2013/12/11 职场文书
青年志愿者活动总结
2014/04/26 职场文书
归元寺导游词
2015/02/06 职场文书
党校学习个人总结
2015/02/15 职场文书
小学感恩主题班会
2015/08/12 职场文书
《黄山奇石》教学反思
2016/02/18 职场文书
宪法宣传标语100条
2019/10/15 职场文书