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 相关文章推荐
python使用urllib2实现发送带cookie的请求
Apr 28 Python
菜鸟使用python实现正则检测密码合法性
Jan 05 Python
python变量不能以数字打头详解
Jul 06 Python
Python中import机制详解
Nov 14 Python
python统计多维数组的行数和列数实例
Jun 23 Python
Python简单计算给定某一年的某一天是星期几示例
Jun 27 Python
详解Python做一个名片管理系统
Mar 14 Python
Python直接赋值、浅拷贝与深度拷贝实例分析
Jun 18 Python
Python彻底删除文件夹及其子文件方式
Dec 23 Python
PyQt5实现画布小程序
May 30 Python
bat批处理之字符串操作的实现
Mar 16 Python
关于Python使用turtle库画任意图的问题
Apr 01 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
dedecms中常见问题修改方法总结
2007/03/21 PHP
利用PHP制作简单的内容采集器的代码
2007/11/28 PHP
ThinkPHP的MVC开发机制实例解析
2014/08/23 PHP
PHP限制HTML内容中图片必须是本站的方法
2015/06/16 PHP
FleaPHP框架数据库查询条件($conditions)写法总结
2016/03/19 PHP
php版微信js-sdk支付接口类用法示例
2016/10/12 PHP
在textarea文本域中显示HTML代码的方法
2007/03/06 Javascript
从新浪弄下来的全屏广告代码 与使用说明
2007/03/15 Javascript
js 数值项目的格式化函数代码
2010/05/14 Javascript
javascript中的toFixed固定小数位数 简单实例分享
2013/07/12 Javascript
Javascript中3种实现继承的方法和代码实例
2014/08/12 Javascript
javascript基于DOM实现省市级联下拉框的方法
2015/05/14 Javascript
javascript实时显示当天日期的方法
2015/05/20 Javascript
js脚本分页代码分享(7种样式)
2015/08/19 Javascript
如何实现移动端浏览器不显示 pc 端的广告
2015/10/15 Javascript
JavaScript弹窗基础篇
2016/04/27 Javascript
javascript 动态脚本添加的简单方法
2016/10/11 Javascript
基于jPlayer三分屏的制作方法
2016/12/21 Javascript
js放大镜放大购物图片效果
2017/01/18 Javascript
详解nodejs实现本地上传图片并预览功能(express4.0+)
2017/06/28 NodeJs
node基于puppeteer模拟登录抓取页面的实现
2018/05/09 Javascript
解决使用bootstrap的dropdown部件时报错:error:Bootstrap dropdown require Popper.js问题
2018/08/30 Javascript
Postman动态获取返回值过程详解
2020/06/30 Javascript
[02:15]你好,这就是DOTA!
2015/08/05 DOTA
python实现统计代码行数的方法
2015/05/22 Python
Python中http请求方法库汇总
2016/01/06 Python
Python实现计算最小编辑距离
2016/03/17 Python
Python3中bytes类型转换为str类型
2018/09/27 Python
详解用python生成随机数的几种方法
2019/08/04 Python
python django生成迁移文件的实例
2019/08/31 Python
pandas 中对特征进行硬编码和onehot编码的实现
2019/12/20 Python
python语言中有算法吗
2020/06/16 Python
Html5新增标签与样式及让元素水平垂直居中
2019/07/11 HTML / CSS
使用HTML5中的contentEditable来将多行文本自动增高
2016/03/01 HTML / CSS
办公室主任岗位承诺书
2014/05/29 职场文书
小学副班长竞选稿
2015/11/21 职场文书