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中用datetime包进行对时间的一些操作
Jun 23 Python
Python字典简介以及用法详解
Nov 15 Python
人工智能最火编程语言 Python大战Java!
Nov 13 Python
python 计算平均平方误差(MSE)的实例
Jun 29 Python
python实现beta分布概率密度函数的方法
Jul 08 Python
python爬虫开发之使用Python爬虫库requests多线程抓取猫眼电影TOP100实例
Mar 10 Python
django xadmin中form_layout添加字段显示方式
Mar 30 Python
解决Python安装cryptography报错问题
Sep 03 Python
Python Pillow(PIL)库的用法详解
Sep 19 Python
python使用bs4爬取boss直聘静态页面
Oct 10 Python
python 日志模块logging的使用场景及示例
Jan 04 Python
Python图片检索之以图搜图
May 31 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数组函数序列之array_intersect() 返回两个或多个数组的交集数组
2011/11/10 PHP
ThinkPHP3.2.2实现持久登录(记住我)功能的方法
2016/05/16 PHP
基于swoole实现多人聊天室
2018/06/14 PHP
Laravel (Lumen) 解决JWT-Auth刷新token的问题
2019/10/24 PHP
PHP项目多语言配置平台实现过程解析
2020/05/18 PHP
goto语法在PHP中的使用教程
2020/09/17 PHP
PHP7新特性
2021/03/09 PHP
摘自启点的main.js
2008/04/20 Javascript
[JSF]使用DataModel处理表行事件的实例代码
2013/08/05 Javascript
javascript事件处理模型实例说明
2016/05/31 Javascript
Node.js中防止错误导致的进程阻塞的方法
2016/08/11 Javascript
nodejs的HTML分析利器node-jquery用法浅析
2016/11/08 NodeJs
jQuery zTree树插件简单使用教程
2017/01/10 Javascript
jQuery实现按比例缩放图片的方法
2017/04/29 jQuery
JavaScript同源策略和跨域访问实例详解
2018/04/03 Javascript
详解mpvue中小程序自定义导航组件开发指南
2019/02/11 Javascript
详解Vue之父子组件传值
2019/04/01 Javascript
vue组件中传值EventBus的使用及注意事项说明
2020/11/16 Javascript
jQuery实现查看图片功能
2020/12/01 jQuery
nodejs中使用worker_threads来创建新的线程的方法
2021/01/22 NodeJs
PyCharm代码回滚,恢复历史版本的解决方法
2018/10/22 Python
python实现多层感知器MLP(基于双月数据集)
2019/01/18 Python
如何用Python做一个微信机器人自动拉群
2019/07/03 Python
Python获取时间范围内日期列表和周列表的函数
2019/08/05 Python
Python argparse模块使用方法解析
2020/02/20 Python
Python绘图实现台风路径可视化代码实例
2020/10/23 Python
Python GUI库Tkiner使用方法代码示例
2020/11/27 Python
前端canvas水印快速制作(附完整代码)
2019/09/19 HTML / CSS
Gibson London官网:以地道的英国男装而著称
2019/12/06 全球购物
伦敦鲜花递送:Flower Station
2021/02/03 全球购物
致跳高运动员广播稿
2014/01/13 职场文书
致跳远运动员广播稿
2014/02/11 职场文书
销售经理岗位职责
2014/03/16 职场文书
小学生思想品德评语
2014/12/31 职场文书
2015年节能减排工作总结
2015/05/14 职场文书
2016入党积极分子党课培训心得体会
2016/01/06 职场文书