美文网首页
DFS(深度搜索) & BFS(广度搜索)

DFS(深度搜索) & BFS(广度搜索)

作者: yanlong107 | 来源:发表于2021-04-19 23:32 被阅读0次

前言

遍历二叉树我们会经常用到BFS和DFS,这里记录下两种方式的区别。

例题

输入一棵二叉树求该树的深度。
从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。

这里获取一棵二叉树的深度,可以是递归的方法,属于DFS(深度优先搜索);另一种方法是按照层次遍历,属于BFS(广度优先搜索)。

DFS(深度搜索)

  • 通过遍历的方式进行深度搜索
  • 可以是自底向上汇总搜索结果 or 自顶向下汇总搜索结果

示例代码

/*
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};*/
class Solution {
public:
    // 自底向上搜索
    int DFS1(TreeNode* root) {
      if (root == nullptr) {
        return 0;
      }
      int left = DFS1(root->left);
      int right = DFS1(root->right);

      return left > right ? left + 1 : right + 1;
  }

 // 自顶向下搜索
int depthRes = 0;
void DFS2(TreeNode* root,int depth) {
    if (root == nullptr) {
        return;
    }
    depth = depth + 1;
    if(depth > depthRes) {
        depthRes = depth;
    }
    DFS2(root->left, depth);
    DFS2(root->right, depth);
}


};

BFS(广度搜索)

  • 广度搜索一般通过 队列queue 来帮助完成(queue 有着先进先出的特性)

示例代码

/*
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};*/
class Solution {
public:
// 广度搜索
int BFS(TreeNode* root)
{
    if (root == nullptr) {
        return 0;
    }
    queue<TreeNode*> treeQueue;
    int resDepth = 0;
    treeQueue.push(root);
    while (treeQueue.size()) {
        int size = treeQueue.size();
        resDepth ++;
        for (int i = 0; i < size; ++i) {
            TreeNode* tmp = treeQueue.front();
            treeQueue.pop();
            if (tmp->left != nullptr) {
                treeQueue.push(tmp->left);
            }
            if (tmp->right != nullptr) {
                treeQueue.push(tmp->right);
            }
        }
    }
    return resDepth;
}

}

记录下,深度搜索 和 广度搜索的方案。
end!

相关文章

  • BFS和DFS

    BFS:广度优先搜索 DFS:深度优先搜索 树的遍历 BFS:A B C D E F G H I DFS: A ...

  • DFS与BFS LeetCode 刷题小结(一)

    本节我们将汇总一些 LeetCode bfs与dfs相关的题。 关于深度优先搜索(DFS)和广度优先搜索(BFS)...

  • BFS

    [TOC] BFS 和 DFS BFS广度有限搜索和DFS深度优先搜索算法是特别常用的两种算法 DFS 算法就是回...

  • DFS(深度搜索) & BFS(广度搜索)

    前言 遍历二叉树我们会经常用到BFS和DFS,这里记录下两种方式的区别。 例题 输入一棵二叉树求该树的深度。从根结...

  • ❤算法解析---图的广度优先搜索(BFS)和深度优先搜索(DFS

    图的广度优先搜索(BFS)和深度优先搜索(DFS)算法解析 https://blog.csdn.net/weixi...

  • 刷题7 剑指 Offer — DFS

    树的遍历方式总体分为两类:深度优先搜索(DFS)、广度优先搜索(BFS);常见的 DFS : 先序遍历、中序遍历、...

  • 图的深度优先遍历和广度优先遍历

    图的遍历主要有深度优先搜索 DFS(depth-first search) 和广度优先搜索BFS( breadth...

  • 普通搜索之DFS

    深度优先搜索(DFS)和广度优先搜索(BFS)是搜索问题中比较常见的方法。此篇介绍DFS算法思想。现有n个点,m条...

  • DFS(栈)&BFS(队列)

    前言 对树(tree)或者图(graph)而言,深度优先搜索(DFS) 和广度优先搜索(BFS)都是用于遍历或者搜...

  • 图的相关算法

    深度优先搜索非递归形式 DFS 深度优先搜索非递归形式 广度优先搜索 BFS 判断无向图是否是树 判断有向图中两...

网友评论

      本文标题:DFS(深度搜索) & BFS(广度搜索)

      本文链接:https://www.haomeiwen.com/subject/hwawlltx.html