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进行验证码识别的一些想法
Jan 25 Python
Python多层嵌套list的递归处理方法(推荐)
Jun 08 Python
用Python实现命令行闹钟脚本实例
Sep 05 Python
Python标准库inspect的具体使用方法
Dec 06 Python
Python Opencv实现图像轮廓识别功能
Mar 23 Python
python3的数据类型及数据类型转换实例详解
Aug 20 Python
基于python实现蓝牙通信代码实例
Nov 19 Python
python实现异常信息堆栈输出到日志文件
Dec 26 Python
tensorflow多维张量计算实例
Feb 11 Python
详解python UDP 编程
Aug 24 Python
利用Python实现字幕挂载(把字幕文件与视频合并)思路详解
Oct 21 Python
Pycharm-community-2020.2.3 社区版安装教程图文详解
Dec 08 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动态生成虚拟现实VRML网页
2006/10/09 PHP
一步一步学习PHP(7) php 字符串相关应用
2010/03/05 PHP
PHP版网站缓存加快打开速度的方法分享
2012/06/03 PHP
解决FastCGI 进程超过了配置的活动超时时限的问题
2013/07/03 PHP
ThinkPHP分页类使用详解
2014/03/05 PHP
遍历echsop的region表形成缓存的程序实例代码
2016/11/01 PHP
HTML代码中标签的全部属性 中文注释说明
2009/03/26 Javascript
JavaScript DOM学习第四章 getElementByTagNames
2010/02/19 Javascript
jquery重新播放css动画所遇问题解决
2013/08/21 Javascript
js在IE与firefox的差异集锦
2014/11/11 Javascript
纯js代码实现简单计算器
2015/12/02 Javascript
jQuery中元素选择器(element)简单用法示例
2018/05/14 jQuery
详解Angular Karma测试的持续集成实践
2019/11/15 Javascript
vue实现在线预览pdf文件和下载(pdf.js)
2019/11/26 Javascript
Vue微信公众号网页分享的示例代码
2020/05/28 Javascript
[53:18]Spirit vs Liquid Supermajor小组赛A组 BO3 第三场 6.2
2018/06/03 DOTA
python 排序算法总结及实例详解
2016/09/28 Python
Numpy 将二维图像矩阵转换为一维向量的方法
2018/06/05 Python
python gensim使用word2vec词向量处理中文语料的方法
2019/07/05 Python
基于python的selenium两种文件上传操作实现详解
2019/09/19 Python
Python使用Opencv实现图像特征检测与匹配的方法
2019/10/30 Python
Django Form常用功能及代码示例
2020/10/13 Python
python Scrapy爬虫框架的使用
2021/01/21 Python
45个非常奇妙的CSS3 特性应用示例
2012/01/01 HTML / CSS
介绍下java.util.Arrays类
2012/10/16 面试题
大学生村官事迹材料
2014/01/21 职场文书
《将心比心》教学反思
2014/04/08 职场文书
C++程序员求职信
2014/05/07 职场文书
安全保卫工作竞聘材料
2014/08/25 职场文书
“四风”问题整改措施和努力方向
2014/09/20 职场文书
2014年重阳节老干部座谈会局领导发言稿
2014/09/25 职场文书
迎新生欢迎词
2015/01/23 职场文书
联谊会开场白
2015/06/01 职场文书
我是特种兵观后感
2015/06/11 职场文书
导游词之青岛崂山
2019/12/27 职场文书
使用python生成大量数据写入es数据库并查询操作(2)
2022/09/23 Python