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编写网页爬虫脚本并实现APScheduler调度
Jul 28 Python
用python读写excel的方法
Nov 18 Python
Python中非常实用的一些功能和函数分享
Feb 14 Python
详细解读tornado协程(coroutine)原理
Jan 15 Python
python生成密码字典的方法
Jul 06 Python
对PyQt5基本窗口控件 QMainWindow的使用详解
Jun 19 Python
Python3如何在Windows和Linux上打包
Feb 25 Python
Python线程协作threading.Condition实现过程解析
Mar 12 Python
Python按照list dict key进行排序过程解析
Apr 04 Python
IDLE下Python文件编辑和运行操作
Apr 25 Python
Python源码解析之List
May 21 Python
Opencv实现二维直方图的计算及绘制
Jul 21 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
Body是什么,该怎么喝出咖啡里的口感
2021/03/03 咖啡文化
laravel 如何实现引入自己的函数或类库
2019/10/15 PHP
Laravel实现通过blade模板引擎渲染视图
2019/10/25 PHP
node.js开机自启动脚本文件
2014/12/24 Javascript
JavaScript中函数表达式和函数声明及函数声明与函数表达式的不同
2015/11/15 Javascript
详解XMLHttpRequest(二)响应属性、二进制数据、监测上传下载进度
2016/09/14 Javascript
JS调用打印机功能简单示例
2016/11/28 Javascript
浅谈vue-cli加载不到dev-server.js的解决办法
2017/11/24 Javascript
React Hooks的深入理解与使用
2018/11/12 Javascript
详解vuex之store拆分即多模块状态管理(modules)篇
2018/11/13 Javascript
JS实现倒计时图文效果
2018/11/17 Javascript
vue单页面在微信下只能分享落地页的解决方案
2019/04/15 Javascript
微信小程序实现左滑动删除效果
2020/03/30 Javascript
关于JS模块化的知识点分享
2019/10/16 Javascript
在JavaScript中查找字符串中最长单词的三种方法(推荐)
2021/01/18 Javascript
Python内置函数dir详解
2015/04/14 Python
Python写的一个简单监控系统
2015/06/19 Python
cmd运行python文件时对结果进行保存的方法
2018/05/16 Python
python实现将多个文件分配到多个文件夹的方法
2019/01/07 Python
Python pycharm 同时加载多个项目的方法
2019/01/17 Python
python输入多行字符串的方法总结
2019/07/02 Python
OpenCV 模板匹配
2019/07/10 Python
PyQt5使用QTimer实现电子时钟
2019/07/29 Python
Python sys模块常用方法解析
2020/02/20 Python
python利用递归方法实现求集合的幂集
2020/09/07 Python
维多利亚的秘密官方网站:Victoria’s Secret
2018/10/24 全球购物
函授生自我鉴定
2014/03/25 职场文书
学习党章的体会
2014/11/07 职场文书
2014年督导工作总结
2014/11/19 职场文书
委托书英文
2015/01/28 职场文书
2015年药房工作总结
2015/04/25 职场文书
生产车间管理制度
2015/08/04 职场文书
村官2015年度工作总结
2015/10/14 职场文书
python通配符之glob模块的使用详解
2021/04/24 Python
Python入门之基础语法详解
2021/05/11 Python
Pytorch中的数据集划分&正则化方法
2021/05/27 Python