前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >DFS(深度搜索) & BFS(广度搜索)

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

作者头像
艳龙
发布2021-12-16 17:52:26
6050
发布2021-12-16 17:52:26
举报
文章被收录于专栏:yanlongli_艳龙yanlongli_艳龙

前言

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

例题

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

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

DFS(深度搜索)

  • 通过遍历的方式进行深度搜索
  • 可以是自底向上汇总搜索结果 or 自顶向下汇总搜索结果
示例代码
代码语言:javascript
复制
/*
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 有着先进先出的特性)
示例代码
代码语言:javascript
复制
/*
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!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/4/19 下,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 例题
  • DFS(深度搜索)
    • 示例代码
    • BFS(广度搜索)
      • 示例代码
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档