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的几种开发工具介绍
Mar 07 Python
Python urllib模块urlopen()与urlretrieve()详解
Nov 01 Python
TensorFlow入门使用 tf.train.Saver()保存模型
Apr 24 Python
python向已存在的excel中新增表,不覆盖原数据的实例
May 02 Python
Python对象中__del__方法起作用的条件详解
Nov 01 Python
python用post访问restful服务接口的方法
Dec 07 Python
python合并已经存在的sheet数据到新sheet的方法
Dec 11 Python
关于Pycharm无法debug问题的总结
Jan 19 Python
使用python PIL库实现简单验证码的去噪方法步骤
May 10 Python
Django中多种重定向方法使用详解
Jul 17 Python
使用 Django Highcharts 实现数据可视化过程解析
Jul 31 Python
简单且有用的Python数据分析和机器学习代码
Jul 02 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读取csv实现csv文件下载功能
2013/12/18 PHP
PHP  Yii清理缓存的实现方法
2016/11/10 PHP
php检测mysql表是否存在的方法小结
2017/07/20 PHP
PHP filter_var() 函数, 验证判断EMAIL,URL等
2021/03/09 PHP
PNG背景在不同浏览器下的应用
2009/06/22 Javascript
跟着Jquery API学Jquery之一 选择器
2010/04/07 Javascript
javascript oop开发滑动(slide)菜单控件
2010/08/25 Javascript
基于jQuery的获得各种控件Value的方法
2010/11/19 Javascript
jQuery获取浏览器中的分辨率实现代码
2013/04/23 Javascript
jQuery经过一段时间自动隐藏指定元素的方法
2015/03/17 Javascript
AngularJS中实现显示或隐藏动画效果的方式总结
2015/12/31 Javascript
jQuery插件Echarts实现的双轴图效果示例【附demo源码下载】
2017/03/04 Javascript
Vue 单文件中的数据传递示例
2017/03/21 Javascript
JS实现动态生成html table表格的方法分析
2018/07/11 Javascript
vue中关闭eslint的方法分析
2018/08/04 Javascript
微信小程序自定义组件的实现方法及自定义组件与页面间的数据传递问题
2018/10/09 Javascript
详解Bootstrap 学习(一)入门
2019/04/12 Javascript
浅谈layui 数据表格前后台传值的问题
2019/09/12 Javascript
javascript实现点击按钮切换轮播图功能
2020/09/23 Javascript
vue将文件/图片批量打包下载zip的教程
2020/10/21 Javascript
python实现通过shelve修改对象实例
2014/09/26 Python
Python中的if、else、elif语句用法简明讲解
2016/03/11 Python
在windows系统中实现python3安装lxml
2016/03/23 Python
Django之form组件自动校验数据实现
2020/01/14 Python
python实现录屏功能(亲测好用)
2020/03/02 Python
Python如何省略括号方法详解
2020/03/21 Python
Python中Selenium库使用教程详解
2020/07/23 Python
css3 transform导致子元素固定定位变成绝对定位的方法
2020/03/06 HTML / CSS
整理的15个非常有用的 HTML5 开发教程和速查手册
2011/10/18 HTML / CSS
基于HTML5 Canvas的3D动态Chart图表的示例
2017/11/02 HTML / CSS
中国好声音广告词
2014/03/18 职场文书
政风行风整改方案
2014/10/25 职场文书
2014年客服工作总结与计划
2014/12/09 职场文书
详解Python常用的魔法方法
2021/06/03 Python
java objectUtils 使用可能会出现的问题
2022/02/28 Java/Android
新的CSS 伪类函数 :is() 和 :where()示例详解
2022/08/05 HTML / CSS