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使用email模块对邮件进行编码和解码的实例教程
Jul 01 Python
python统计字母、空格、数字等字符个数的实例
Jun 29 Python
利用pandas读取中文数据集的方法
Jul 25 Python
opencv python统计及绘制直方图的方法
Jan 21 Python
Python实现定期检查源目录与备份目录的差异并进行备份功能示例
Feb 27 Python
python matplotlib画图库学习绘制常用的图
Mar 19 Python
用Python生成HTML表格的方法示例
Mar 06 Python
python针对Oracle常见查询操作实例分析
Apr 30 Python
Django静态资源部署404问题解决方案
May 11 Python
详解Java中一维、二维数组在内存中的结构
Feb 11 Python
python 常用的异步框架汇总整理
Jun 18 Python
使用Python通过企业微信应用给企业成员发消息
Apr 18 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编程最快明白》第三讲:php数组
2010/11/01 PHP
ThinkPhP+Apache+PHPstorm整合框架流程图解
2020/11/23 PHP
Iframe thickbox2.0使用的方法
2009/03/05 Javascript
不同浏览器对回车提交表单的处理办法
2010/02/13 Javascript
JS 表单验证大全
2011/11/23 Javascript
浅析jquery ajax异步调用方法中不能给全局变量赋值的原因及解决方法
2014/01/10 Javascript
js控制文本框只输入数字和小数点的方法
2015/03/10 Javascript
在Mac OS下使用Node.js的简单教程
2015/06/24 Javascript
JS+CSS实现精美的二级导航效果代码
2015/09/17 Javascript
javascript实现添加附件功能的方法
2015/11/18 Javascript
Javascript缓存API
2016/06/14 Javascript
jquery自动补齐功能插件flexselect用法示例
2016/08/06 Javascript
JS动态的把左边列表添加到右边的实现代码(可上下移动)
2016/11/17 Javascript
jquery表单提交带错误信息提示效果
2017/03/09 Javascript
NodeJS模块与ES6模块系统语法及注意点详解
2019/01/04 NodeJs
jQuery中使用validate插件校验表单功能
2019/05/24 jQuery
vue实现行列转换的一种方法
2019/08/06 Javascript
解决vue scoped html样式无效的问题
2020/10/24 Javascript
Vue 集成 PDF.js 实现 PDF 预览和添加水印的步骤
2021/01/22 Vue.js
Python可跨平台实现获取按键的方法
2015/03/05 Python
Django自定义插件实现网站登录验证码功能
2017/04/19 Python
python修改list中所有元素类型的三种方法
2018/04/09 Python
Python通用函数实现数组计算的方法
2019/06/13 Python
ipython jupyter notebook中显示图像和数学公式实例
2020/04/15 Python
Python错误的处理方法
2020/06/23 Python
浅析PyCharm 的初始设置(知道)
2020/10/12 Python
HTML5学习笔记之html5与传统html区别
2016/01/06 HTML / CSS
安全员岗位职责
2013/11/11 职场文书
班主任寄语大全
2014/04/04 职场文书
促销活动计划书
2014/05/02 职场文书
代领学位证书毕业证书委托书
2014/09/30 职场文书
支部书记四风问题对照检查材料
2014/10/04 职场文书
夫妻双方自愿离婚协议书
2014/10/24 职场文书
黄石寨导游词
2015/02/05 职场文书
创业计划书之物流运送
2019/09/17 职场文书
Python音乐爬虫完美绕过反爬
2021/08/30 Python