BFS:Breadth First Search,广度优先搜索
DFS:Depth First Search,深度优先搜索

如图,A节点的下一级元素为B节点和C节点,B节点的下一级元素为D节点和E节点,C节点的下一级元素为F节点和G节点。
BFS优先遍历当前节点下一级节点的同级元素,即若当前节点为A节点,则继续遍历的节点为B和C;当A的所有相邻节点遍历完以后,再遍历B节点的相邻节点D节点和E节点,以及C节点的相邻节点F节点和G节点。至此,所有节点遍历完成。
DFS优先遍历当前节点下一级节点的下一级元素,即若当前节点为A节点,则继续遍历的节点为B节点和B节点的下一级节点D节点;D节点没有下一级节点,此时再返回D节点的上一级B节点处,再遍历B节点的另一个下一级元素E节点,若没有未遍历过的下一级元素,则返回上一级,依此规律遍历整个树,完成树的DFS。

1.BFS
BFS与树的层序遍历类似,使用队列实现
算法流程:

  1. 将树append到队列中
  2. while 队列不为空
          取队列第一个元素
          if该元素的左孩子不为空
                将左孩子append到队列
          if该元素的右孩子不为空
                将右孩子append到队列
          打印该元素的val

代码:

def BFS(root):
# 使用列表作为队列queue = []# 将首个根节点添加到队列中queue.append(root)print(root)# 当队列不为空时进行遍历while queue:# 从队列头部取出一个节点并判断其是否有左右节点# 若有子节点则把对应子节点添加到队列中,且优先判断左节点temp = queue.pop(0)if temp.left:queue.append(left)if temp.right:queue.append(right)print(temp.val,end=" ")

2.DFS
DFS跟前序遍历一样,使用栈实现
算法流程:

  1. 将树append到栈中
  2. while 栈不为空
          取栈最后一个元素
          if该元素的右孩子不为空
                将右孩子append到栈
          if该元素的左孩子不为空
                将左孩子append到栈
          打印该元素的val

代码:

def DFS(root):
# 使用列表作为栈stack = []# 将首个根节点添加到栈中stack.append(root)# 当栈不为空时进行遍历while stack:# 从栈的末尾弹出一个节点并判断其是否有左右节点# 若有子节点则把对应子节点压入栈中,且优先判断右节点temp = stack.pop()if temp.right:stack.append(right)if temp.left:stack.append(left)print(temp.val,end=" ")

树的广度优先搜索(BFS),深度优先搜索(DFS)相关推荐

  1. LeetCode 529. 扫雷游戏(广度优先搜索BFS/深度优先搜索DFS)

    文章目录 1. 题目 2. 解题 2.1 BFS 2.2 DFS 1. 题目 让我们一起来玩扫雷游戏! 给定一个代表游戏板的二维字符矩阵. 'M' 代表一个未挖出的地雷, 'E' 代表一个未挖出的空方 ...

  2. P1331 海战 (搜索 广度优先搜索,BFS深度优先搜索,DFS)

    题目描述 在峰会期间,武装部队得处于高度戒备.警察将监视每一条大街,军队将保卫建筑物,领空将布满了F-2003飞机.此外,巡洋船只和舰队将被派去保护海岸线.不幸的是因为种种原因,国防海军部仅有很少的几 ...

  3. P1506 拯救oibh总部 (模拟搜索广度优先搜索,BFS深度优先搜索,DFS)

    题目背景 oibh总部突然被水淹没了!现在需要你的救援-- 题目描述 oibh被突来的洪水淹没了>.<还好oibh总部有在某些重要的地方起一些围墙,用*号表示,而一个封闭的*号区域洪水是进 ...

  4. 算法导论--广度优先搜索和深度优先搜索

    广度优先搜索 在给定图G=(V,E)和一个特定的源顶点s的情况下,广度优先搜索系统地探索G中的边,以期"发现"可从s 到达的所有顶点,并计算s 到所有这些可达顶点之间的距离(即最少 ...

  5. 数据结构与算法—图论之dfs、bfs(深度优先搜索、宽度优先搜索)

    文章目录 前言 邻接矩阵和邻接表 深度优先搜索(dfs) 宽度(广度)优先搜索(bfs) 总结与比较 前言 在有向图和无向图中,如果节点之间无权值或者权值相等,那么dfs和bfs时常出现在日常算法中. ...

  6. 广度优先搜索_深度优先搜索和广度优先搜索[09]

    搜索与遍历 绝大多数搜索的处理叫暴力搜索,或者说比较简单朴素的搜索.如果数据结构本身没有任何特点,很普通的树或者图,我们要做的一件事就是把所有节点都遍历一次. 每个节点都要访问一次 每个节点仅仅要访问 ...

  7. 八数码深度优先搜索_深度优先搜索和广度优先搜索

    深度优先搜索和广度优先搜索 关于搜索&遍历 对于搜索来说,我们绝大多数情况下处理的都是叫 "所谓的暴力搜索" ,或者是说比较简单朴素的搜索,也就是说你在搜索的时候没有任何所 ...

  8. 广度优先搜索与深度优先搜索

    广度优先搜索(宽度优先搜索,BFS)和深度优先搜索(DFS)算法的应用非常广泛,本篇文章主要介绍BFS与DFS的原理.实现和应用. 深度优先搜索 图的深度优先搜索(Depth First Search ...

  9. AI(人工智能:一种现代的方法)学习之:无信息搜索(uninformed search)算法——广度优先搜索、深度优先搜索、Uniform-cost search

    文章目录 参考 搜索算法 深度优先搜索 depth-first search 性能分析 完整性 complete 最优性 optimal 时间复杂度 空间复杂度 广度优先搜索 breadth-firs ...

  10. 根据邻接表求深度优先搜索和广度优先搜索_深度优先搜索/广度优先搜索与java的实现...

    度:某个顶点的度就是依附于该顶点的边的个数 子图:一幅图中所有边(包含依附边的顶点)的子集 路径:是由边顺序连接的一系列定点组成 环:至少含有一条边且终点和起点相同的路径 连通图:如果图中任一个到另一 ...

最新文章

  1. 用数据说话——IOPS:RAID1+0 RAID5
  2. 动态隐藏ALV的行和列
  3. [CVPR2019]:专门为卷积神经网络设计的训练方法:RePr
  4. 在centos7上安装Jenkins
  5. mysqlbinlog恢复误删数据
  6. 【飞秋】进一步完善 -- GEF创建助手工具条
  7. Java提高篇——Java中的异常处理
  8. 杭电1028Ignatius and the Princess III
  9. CSS学习总结(5)——列表/表格/链接/鼠标光标样式
  10. Delphi2010安装TWordApplication控件
  11. C++中的void类型
  12. P3537 [POI2012]SZA-Cloakroom
  13. 解决报错:Uncaught (in promise) NavigationDuplicated: Avoided redundant navigation to current location: “
  14. 详解Axes()中的markersize
  15. 数据仓库系列3-事实表
  16. 关于隔离电源断电瞬间MOSFET损坏问题分析
  17. 动画animationend 事件在活动红包雨中的应用
  18. 正态分布(Normal distribution)与高斯分布(Gaussian distribution)
  19. 沃尔玛中国迎来首位女性CEO;默克旗下基金投资中国人工智能芯片初创公司 | 美通企业日报...
  20. PF使用率过高及解决方法

热门文章

  1. sum() over() 函数的使用
  2. maven2学习总结(3,maven2在淘宝项目的应用)
  3. Keras:保存模型并载入模型继续训练
  4. 劳动力工资调整模型的探讨——数学建模
  5. 攻防世界Reverse第三题python-trade
  6. 【python】队列——用顺序表实现队列操作
  7. [专题目录]-CA/TA development导读目录
  8. C语言:构建一个二级链表并完成增删改查
  9. 关闭生成调试信息和嵌入清单
  10. 【安全】免密登陆SQLSERVER 之 Token 窃取