深度优先搜索(DFS)

一、深搜简介

 深搜主要使用的是递归的方式,从一个点开始不断往里搜索也就是递归中的,当遇到不符合条件的或者目标对象时候就进行归。

主要用与遍历或树和图的搜索算法,在这个过程中我们同样可以使用栈来解决。粗略的理解就是一条路走到黑。

1.原理

 图示:

上图演示了在树中查找数字5的过程,可以明显的看到,它先是一直往深处搜索,直到为空

再不断的往后回退,退到有新的分支出现,就对新的分支进行搜索。

二、代码演示

1.dfs在二叉树中的运用是非常多的,最常见的就是前,中,后序遍历

#include<iostream>
#include<vector>
/*二叉树中序遍历*/
struct TreeNode {
     int val;
     TreeNode *left;
     TreeNode *right;
     TreeNode() : val(0), left(nullptr), right(nullptr) {}
     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 };

class Solution {
public:
    void inorder(TreeNode *root,std::vector<int> &v)
    {
        if(root == nullptr)return ;
        //如果不为空就继续遍历左子树
        inorder(root->left,v);
        //为空就输出值
        v.push_back(root->val);
        //值输出后,再遍历右子树
        inorder(root->right,v);
    }
    std::vector<int> inorderTraversal(TreeNode* root) {
        std::vector<int>v;
        inorder(root,v);
        return v;
    }
};

在inorder这个函数中我们可以看到,如果当前节点不为空,我们先再调用inorder接着遍历它的左子树直到节点为空,然后再输出值,最后遍历右子树。

 

posted @ 2024-03-13 14:55  clinx000  阅读(13)  评论(0编辑  收藏  举报