树的广度优先搜索(BFS),深度优先搜索(DFS)
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与树的层序遍历类似,使用队列实现
算法流程:
- 将树append到队列中
- 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跟前序遍历一样,使用栈实现
算法流程:
- 将树append到栈中
- 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)相关推荐
- LeetCode 529. 扫雷游戏(广度优先搜索BFS/深度优先搜索DFS)
文章目录 1. 题目 2. 解题 2.1 BFS 2.2 DFS 1. 题目 让我们一起来玩扫雷游戏! 给定一个代表游戏板的二维字符矩阵. 'M' 代表一个未挖出的地雷, 'E' 代表一个未挖出的空方 ...
- P1331 海战 (搜索 广度优先搜索,BFS深度优先搜索,DFS)
题目描述 在峰会期间,武装部队得处于高度戒备.警察将监视每一条大街,军队将保卫建筑物,领空将布满了F-2003飞机.此外,巡洋船只和舰队将被派去保护海岸线.不幸的是因为种种原因,国防海军部仅有很少的几 ...
- P1506 拯救oibh总部 (模拟搜索广度优先搜索,BFS深度优先搜索,DFS)
题目背景 oibh总部突然被水淹没了!现在需要你的救援-- 题目描述 oibh被突来的洪水淹没了>.<还好oibh总部有在某些重要的地方起一些围墙,用*号表示,而一个封闭的*号区域洪水是进 ...
- 算法导论--广度优先搜索和深度优先搜索
广度优先搜索 在给定图G=(V,E)和一个特定的源顶点s的情况下,广度优先搜索系统地探索G中的边,以期"发现"可从s 到达的所有顶点,并计算s 到所有这些可达顶点之间的距离(即最少 ...
- 数据结构与算法—图论之dfs、bfs(深度优先搜索、宽度优先搜索)
文章目录 前言 邻接矩阵和邻接表 深度优先搜索(dfs) 宽度(广度)优先搜索(bfs) 总结与比较 前言 在有向图和无向图中,如果节点之间无权值或者权值相等,那么dfs和bfs时常出现在日常算法中. ...
- 广度优先搜索_深度优先搜索和广度优先搜索[09]
搜索与遍历 绝大多数搜索的处理叫暴力搜索,或者说比较简单朴素的搜索.如果数据结构本身没有任何特点,很普通的树或者图,我们要做的一件事就是把所有节点都遍历一次. 每个节点都要访问一次 每个节点仅仅要访问 ...
- 八数码深度优先搜索_深度优先搜索和广度优先搜索
深度优先搜索和广度优先搜索 关于搜索&遍历 对于搜索来说,我们绝大多数情况下处理的都是叫 "所谓的暴力搜索" ,或者是说比较简单朴素的搜索,也就是说你在搜索的时候没有任何所 ...
- 广度优先搜索与深度优先搜索
广度优先搜索(宽度优先搜索,BFS)和深度优先搜索(DFS)算法的应用非常广泛,本篇文章主要介绍BFS与DFS的原理.实现和应用. 深度优先搜索 图的深度优先搜索(Depth First Search ...
- AI(人工智能:一种现代的方法)学习之:无信息搜索(uninformed search)算法——广度优先搜索、深度优先搜索、Uniform-cost search
文章目录 参考 搜索算法 深度优先搜索 depth-first search 性能分析 完整性 complete 最优性 optimal 时间复杂度 空间复杂度 广度优先搜索 breadth-firs ...
- 根据邻接表求深度优先搜索和广度优先搜索_深度优先搜索/广度优先搜索与java的实现...
度:某个顶点的度就是依附于该顶点的边的个数 子图:一幅图中所有边(包含依附边的顶点)的子集 路径:是由边顺序连接的一系列定点组成 环:至少含有一条边且终点和起点相同的路径 连通图:如果图中任一个到另一 ...
最新文章
- 用数据说话——IOPS:RAID1+0 RAID5
- 动态隐藏ALV的行和列
- [CVPR2019]:专门为卷积神经网络设计的训练方法:RePr
- 在centos7上安装Jenkins
- mysqlbinlog恢复误删数据
- 【飞秋】进一步完善 -- GEF创建助手工具条
- Java提高篇——Java中的异常处理
- 杭电1028Ignatius and the Princess III
- CSS学习总结(5)——列表/表格/链接/鼠标光标样式
- Delphi2010安装TWordApplication控件
- C++中的void类型
- P3537 [POI2012]SZA-Cloakroom
- 解决报错:Uncaught (in promise) NavigationDuplicated: Avoided redundant navigation to current location: “
- 详解Axes()中的markersize
- 数据仓库系列3-事实表
- 关于隔离电源断电瞬间MOSFET损坏问题分析
- 动画animationend 事件在活动红包雨中的应用
- 正态分布(Normal distribution)与高斯分布(Gaussian distribution)
- 沃尔玛中国迎来首位女性CEO;默克旗下基金投资中国人工智能芯片初创公司 | 美通企业日报...
- PF使用率过高及解决方法