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获取指定时间差的时间实例详解
Apr 11 Python
Python实现求两个csv文件交集的方法
Sep 06 Python
python中logging包的使用总结
Feb 28 Python
python微信公众号开发简单流程
Mar 23 Python
Selenium 模拟浏览器动态加载页面的实现方法
May 16 Python
python学习笔记--将python源文件打包成exe文件(pyinstaller)
May 26 Python
python批量获取html内body内容的实例
Jan 02 Python
pandas中的series数据类型详解
Jul 06 Python
Python Django Vue 项目创建过程详解
Jul 29 Python
Python实现在Windows平台修改文件属性
Mar 05 Python
Python logging日志库空间不足问题解决
Sep 14 Python
python 爬取哔哩哔哩up主信息和投稿视频
Jun 07 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 foreach 参数强制类型转换的问题
2010/12/10 PHP
Ajax实时验证用户名/邮箱等是否已经存在的代码打包
2011/12/01 PHP
PHP发送AT指令实例代码
2016/05/26 PHP
thinkphp3.2框架中where条件查询用法总结
2019/08/13 PHP
Yii框架的redis命令使用方法简单示例
2019/10/15 PHP
jQuery Ajax之load()方法
2009/10/12 Javascript
js获取元素在浏览器中的绝对位置
2010/07/24 Javascript
ajax更新数据后,jquery、jq失效问题
2011/03/16 Javascript
使用jquery hover事件实现表格的隔行换色功能示例
2013/09/03 Javascript
json格式的时间显示为正常年月日的方法
2013/09/08 Javascript
js格式化时间小结
2014/11/03 Javascript
javascript获取当前鼠标坐标的方法
2015/01/10 Javascript
jquery获取checkbox的值并post提交
2015/01/14 Javascript
js比较日期大小的方法
2015/05/12 Javascript
JS结合bootstrap实现基本的增删改查功能
2016/07/22 Javascript
微信小程序实战之运维小项目
2017/01/17 Javascript
VUE中v-model和v-for指令详解
2017/06/23 Javascript
js处理包含中文的字符串实例
2017/10/11 Javascript
JS实现同一DOM元素上onClick事件与onDblClick事件并存的解决方法
2018/06/07 Javascript
layui点击导航栏刷新tab页的示例代码
2018/08/14 Javascript
vue项目中极验验证的使用代码示例
2019/12/03 Javascript
python用于url解码和中文解析的小脚本(python url decoder)
2013/08/11 Python
Python生成器(Generator)详解
2015/04/13 Python
python输出当前目录下index.html文件路径的方法
2015/04/28 Python
Python中for循环和while循环的基本使用方法
2015/08/21 Python
Python编程修改MP3文件名称的方法
2017/04/19 Python
Python实现的当前时间多加一天、一小时、一分钟操作示例
2018/05/21 Python
在Pycharm中使用GitHub的方法步骤
2019/06/13 Python
django ajax发送post请求的两种方法
2020/01/05 Python
解决Jupyter NoteBook输出的图表太小看不清问题
2020/04/16 Python
HTML5通过调用canvas对象的getContext()方法来获取绘图环境
2014/06/23 HTML / CSS
幼儿园新年寄语
2014/04/03 职场文书
广告学专业毕业生自荐信
2014/05/28 职场文书
学习型家庭事迹材料
2014/12/20 职场文书
中秋客户感谢信
2015/01/22 职场文书
mysql中如何用命令创建联合唯一索引
2022/04/20 MySQL