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 13 Python
PYTHON压平嵌套列表的简单实现
Jun 08 Python
Python中字符串的处理技巧分享
Sep 17 Python
Python简单遍历字典及删除元素的方法
Sep 18 Python
Python调用系统底层API播放wav文件的方法
Aug 11 Python
对python同一个文件夹里面不同.py文件的交叉引用方法详解
Dec 15 Python
python实现两个dict合并与计算操作示例
Jul 01 Python
对python 调用类属性的方法详解
Jul 02 Python
python绘制已知点的坐标的直线实例
Jul 04 Python
Spring http服务远程调用实现过程解析
Jun 11 Python
Python学习工具jupyter notebook安装及用法解析
Oct 23 Python
python必学知识之文件操作(建议收藏)
May 30 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
mcrypt启用 加密以及解密过程详细解析
2013/08/07 PHP
实例讲解YII2中多表关联的使用方法
2017/07/21 PHP
Laravel中的Blade模板引擎示例详解
2017/10/10 PHP
扩展jquery实现客户端表格的分页、排序功能代码
2011/03/16 Javascript
Jquery 绑定时间实现代码
2011/05/03 Javascript
Javascript 中的 call 和 apply使用介绍
2012/02/22 Javascript
javascript中方便增删改cookie的一个类
2012/10/11 Javascript
JS实现窗口加载时模拟鼠标移动的方法
2015/06/03 Javascript
配置Grunt的Task时通配符支持和动态生成文件名问题
2015/09/06 Javascript
基于javascript实现右下角浮动广告效果
2016/01/08 Javascript
浅谈JavaScript中小数和大整数的精度丢失
2016/05/31 Javascript
浅谈如何实现easyui的datebox格式化
2016/06/12 Javascript
js微信分享API
2020/10/11 Javascript
使用JS轻松实现ionic调用键盘搜索功能(超实用)
2016/09/06 Javascript
什么是JavaScript中的结果值?
2016/10/08 Javascript
学习Node.js模块机制
2016/10/17 Javascript
详解vue服务端渲染(SSR)初探
2017/06/19 Javascript
JS实现为动态添加的元素增加事件功能示例【基于事件委托】
2018/03/21 Javascript
nuxt.js中间件实现拦截权限判断的方法
2018/11/21 Javascript
vue+element创建动态的form表单及动态生成表格的行和列
2019/05/20 Javascript
vue实现数字动态翻牌的效果(开箱即用)
2019/12/08 Javascript
[03:56]显微镜下的DOTA2第十一期——鬼畜的死亡先知播音员
2014/06/23 DOTA
[01:56]生活中的妖精之七夕特别档
2016/08/09 DOTA
python中os操作文件及文件路径实例汇总
2015/01/15 Python
python实现汽车管理系统
2018/11/30 Python
python实现控制电脑鼠标和键盘,登录QQ的方法示例
2019/07/06 Python
将keras的h5模型转换为tensorflow的pb模型操作
2020/05/25 Python
python实现excel公式格式化的示例代码
2020/12/23 Python
购买200个世界上最好的内衣品牌:Bare Necessities
2017/02/11 全球购物
SmartBuyGlasses英国:购买太阳镜和眼镜
2018/01/29 全球购物
三星新西兰官网:Samsung新西兰
2019/03/05 全球购物
总经理岗位职责
2013/11/09 职场文书
超越自我演讲稿
2014/05/21 职场文书
超市促销活动总结
2014/07/01 职场文书
详解Python+OpenCV绘制灰度直方图
2022/03/22 Python
Win10 heic文件怎么打开 ? Win10 heic文件打开教程
2022/04/06 数码科技