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输出一个杨辉三角的例子
Jun 13 Python
详解Python中的条件判断语句
May 14 Python
python 使用get_argument获取url query参数
Apr 28 Python
Python如何通过subprocess调用adb命令详解
Aug 27 Python
python实现BackPropagation算法
Dec 14 Python
python 对key为时间的dict排序方法
Oct 17 Python
python使用pip安装模块出现ReadTimeoutError: HTTPSConnectionPool的解决方法
Oct 04 Python
python生成器推导式用法简单示例
Oct 08 Python
tensorflow实现测试时读取任意指定的check point的网络参数
Jan 21 Python
Django实现文章详情页面跳转代码实例
Sep 16 Python
Pycharm github配置实现过程图解
Oct 13 Python
使用Django实现商城验证码模块的方法
Jun 01 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
模拟SQLSERVER的两个函数:dateadd(),datediff()
2006/10/09 PHP
mysql时区问题
2008/03/26 PHP
Ajax+PHP 边学边练 之二 实例
2009/11/24 PHP
使用GDB调试PHP代码,解决PHP代码死循环问题
2015/03/02 PHP
PHP 实现类似js中alert() 提示框
2015/03/18 PHP
用PHP代码给图片加水印
2015/07/01 PHP
laravel框架模型中非静态方法也能静态调用的原理分析
2019/11/23 PHP
PHP实现笛卡尔积算法的实例讲解
2019/12/22 PHP
JS模拟的QQ面板上的多级可展开的菜单
2009/10/10 Javascript
Javascript 键盘keyCode键码值表
2009/12/24 Javascript
javascript的offset、client、scroll使用方法详解
2012/12/25 Javascript
jquery获取一组checkbox的值(实例代码)
2013/11/04 Javascript
JavaScript函数获取事件源的小例子
2014/05/14 Javascript
JS选中checkbox后获取table内一行TD所有数据的方法
2015/07/01 Javascript
jquery实现简单实用的打分程序实例
2015/07/23 Javascript
浅谈jQuery操作类数组的工具方法
2016/12/23 Javascript
实例详解vue.js浅度监听和深度监听及watch用法
2018/08/16 Javascript
详解小程序如何避免多次点击,重复触发事件
2019/04/08 Javascript
JavaScript中工厂函数与构造函数示例详解
2019/05/06 Javascript
Vue使用Clipboard.JS在h5页面中复制内容实例详解
2019/09/03 Javascript
微信小程序 多行文本显示...+显示更多按钮和收起更多按钮功能
2019/09/26 Javascript
小程序实现上传视频功能
2020/08/18 Javascript
python传递参数方式小结
2015/04/17 Python
Python 探针的实现原理
2016/04/23 Python
Python表示矩阵的方法分析
2017/05/26 Python
python实现简单图书管理系统
2019/11/22 Python
Python爬取爱奇艺电影信息代码实例
2019/11/26 Python
Python使用matplotlib绘制Logistic曲线操作示例
2019/11/28 Python
Pytorch在dataloader类中设置shuffle的随机数种子方式
2020/01/14 Python
Python 随机按键模拟2小时
2020/12/30 Python
Python Process创建进程的2种方法详解
2021/01/25 Python
requests在python中发送请求的实例讲解
2021/02/17 Python
优瑞自动咖啡机官网:Jura
2018/09/29 全球购物
财务人员担保书
2014/05/13 职场文书
体育教师个人总结
2015/02/09 职场文书
如何优化vue打包文件过大
2022/04/13 Vue.js