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实现ip查询示例
Mar 26 Python
浅谈Python数据类型之间的转换
Jun 08 Python
K-means聚类算法介绍与利用python实现的代码示例
Nov 13 Python
python中的内置函数max()和min()及mas()函数的高级用法
Mar 29 Python
python中退出多层循环的方法
Nov 27 Python
树莓派用python中的OpenCV输出USB摄像头画面
Jun 22 Python
python中的colorlog库使用详解
Jul 05 Python
python plotly绘制直方图实例详解
Jul 22 Python
Django RBAC权限管理设计过程详解
Aug 06 Python
python+tifffile之tiff文件读写方式
Jan 13 Python
keras实现VGG16方式(预测一张图片)
Jul 07 Python
Pytorch 中的optimizer使用说明
Mar 03 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 变量定义方法
2009/06/14 PHP
php中hashtable实现示例分享
2014/02/13 PHP
php中session使用示例
2014/03/29 PHP
php定时执行任务设置详解
2015/02/06 PHP
PHP基于ORM方式操作MySQL数据库实例
2017/06/21 PHP
Array, Array Constructor, for in loop, typeof, instanceOf
2011/09/13 Javascript
JavaScript调用ajax获取文本文件内容实现代码
2014/03/28 Javascript
基于jQuery实现最基本的淡入淡出效果实例
2015/02/02 Javascript
jQuery判断数组是否包含了指定的元素
2015/03/10 Javascript
JavaScript获取页面中超链接数量的方法
2015/11/09 Javascript
js获取本机操作系统类型的两种方法
2015/12/19 Javascript
js判断请求的url是否可访问,支持跨域判断的实现方法
2016/09/17 Javascript
angularjs性能优化的方法
2018/09/05 Javascript
详解Vue3.0 + TypeScript + Vite初体验
2021/02/22 Vue.js
python3.0 字典key排序
2008/12/24 Python
Python中的字典与成员运算符初步探究
2015/10/13 Python
python logging 日志轮转文件不删除问题的解决方法
2016/08/02 Python
Python基于scapy实现修改IP发送请求的方法示例
2017/07/08 Python
Django中Model的使用方法教程
2018/03/07 Python
Anaconda2 5.2.0安装使用图文教程
2018/09/19 Python
docker django无法访问redis容器的解决方法
2019/08/21 Python
Python3批量移动指定文件到指定文件夹方法示例
2019/09/02 Python
Tensorflow读取并输出已保存模型的权重数值方式
2020/01/04 Python
使用 PyTorch 实现 MLP 并在 MNIST 数据集上验证方式
2020/01/08 Python
Jupyter notebook 启动闪退问题的解决
2020/04/13 Python
什么是python类属性
2020/06/10 Python
Python 如何定义匿名或内联函数
2020/08/01 Python
英国领先的维生素和补充剂品牌:Higher Nature
2019/08/26 全球购物
new修饰符是起什么作用
2015/06/28 面试题
最新奶茶店创业计划书范文
2014/02/08 职场文书
2015年城管个人工作总结范文
2015/04/20 职场文书
2016年5月份红领巾广播稿
2015/12/21 职场文书
idea编译器vue缩进报错问题场景分析
2021/07/04 Vue.js
Python常用配置文件ini、json、yaml读写总结
2021/07/09 Python
OpenCV绘制圆端矩形的示例代码
2021/08/30 Python
JavaScript选择器函数querySelector和querySelectorAll
2021/11/27 Javascript