寻找最短路径,队列,遍历
0 BFS核心思想
广度优先搜索算法:把问题抽象成图,从点开始,向四周扩散。可使用队列,每次把一个节点周围的所有节点加入队列,一次一步,齐头并进。
数据结构:队列 queue
BFS和DFS的区别:BFS的路径一定最短。但是 空间复杂度高,以空间换时间。DFS是点,BFS是面。
记录层数的方法:
- 每while一次,cnt++,for(int i = 0; i < que.size(); i++)循环队列中的所有元素。
- 使用其他方法,如所有元素的一个map, 初始化为0。从当前元素a搜索到下一个元素b,则mp[b] = mp[a]++; push的时候,再cnt = mp[b];
1 例子
1.【二叉树的最小深度】
给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明:叶子节点是指没有子节点的节点。
int minDepth(TreeNode* root) {
if (root == nullptr) {
return 0;
}
queue<pair<TreeNode *, int>> que;
que.emplace(root, 1);
while (!que.empty()) {
TreeNode *node = que.front().first;
int depth = que.front().second;
que.pop();