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处理json数据中的中文
Mar 06 Python
跟老齐学Python之再深点,更懂list
Sep 20 Python
详解Python3中字符串中的数字提取方法
Jan 14 Python
Python使用pip安装报错:is not a supported wheel on this platform的解决方法
Jan 23 Python
利用Pandas读取文件路径或文件名称包含中文的csv文件方法
Jul 04 Python
Python3实现获取图片文字里中文的方法分析
Dec 13 Python
python基础知识(一)变量与简单数据类型详解
Apr 17 Python
Python考拉兹猜想输出序列代码实践
Jul 05 Python
Django项目使用CircleCI的方法示例
Jul 14 Python
python脚本执行CMD命令并返回结果的例子
Aug 14 Python
python tkinter模块的简单使用
Apr 07 Python
python标准库ElementTree处理xml
May 20 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 事件机制(2)
2011/03/23 PHP
php关键字仅替换一次的实现函数
2015/10/29 PHP
如何打开php的gd2库
2017/02/09 PHP
PHP工厂模式、单例模式与注册树模式实例详解
2019/06/03 PHP
Extjs4 关于Store的一些操作(加载/回调/添加)
2013/04/18 Javascript
AngularJS中的模块详解
2015/01/29 Javascript
javascript实现tab切换的四种方法
2015/11/05 Javascript
阿里云ecs服务器中安装部署node.js的步骤
2016/10/08 Javascript
jQuery简单获取DIV和A标签元素位置的方法
2017/02/07 Javascript
浅谈js函数三种定义方式 & 四种调用方式 & 调用顺序
2017/02/19 Javascript
微信小程序中button组件的边框设置的实例详解
2017/09/27 Javascript
bootstrap下拉框动态赋值方法
2018/08/10 Javascript
谈谈JavaScript中super(props)的重要性
2019/02/12 Javascript
[15:09]DOTA2国际邀请赛采访专栏:Loda
2013/08/06 DOTA
python使用opencv驱动摄像头的方法
2018/08/03 Python
Python对HTML转义字符进行反转义的实现方法
2019/04/28 Python
python threading和multiprocessing模块基本用法实例分析
2019/07/25 Python
Python定时任务随机时间执行的实现方法
2019/08/14 Python
python爬虫爬取监控教务系统的思路详解
2020/01/08 Python
OpenCV4.1.0+VS2017环境配置的方法步骤
2020/07/09 Python
使用Python绘制台风轨迹图的示例代码
2020/09/21 Python
用python进行视频剪辑
2020/11/02 Python
Antonioli美国在线商店:时尚前卫奢华
2019/07/29 全球购物
介绍一下代理模式(Proxy)
2014/10/17 面试题
自荐书范文
2013/12/08 职场文书
校园网站的创业计划书范文
2013/12/30 职场文书
《自选商场》教学反思
2014/02/14 职场文书
简单的大学生自我鉴定
2014/02/18 职场文书
幼教求职信
2014/03/12 职场文书
2015年元旦活动总结
2014/05/09 职场文书
教师党员岗位承诺书
2014/05/29 职场文书
文明倡议书
2015/01/19 职场文书
保护动物的宣传语
2015/07/13 职场文书
2016年大学迎新晚会工作总结
2015/10/15 职场文书
详解Python生成器和基于生成器的协程
2021/06/03 Python
mysql主从复制的实现步骤
2021/10/24 MySQL