刷题 深度优先搜索(dfs)

文章目录

      • 1. 相同树(leetcode 100)
      • 2. 被围绕的区域(leetcode 130)

1. 相同树(leetcode 100)

给定两个二叉树,编写一个函数来检验它们是否相同。
如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
刷题 深度优先搜索(dfs)_第1张图片

解题思路:最简单的思路即遍历每一个节点,指不相等返回false即可。

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    
    bool isSameTree(TreeNode* p, TreeNode* q) {
        if(p==nullptr && q==nullptr)
            return true;
        if(p==nullptr || q==nullptr)
            return false;
        if(p->val!=q->val)
            return false;
        return isSameTree(p->left,q->left) && isSameTree(p->right,q->right);
        ;
    }
};

2. 被围绕的区域(leetcode 130)

题目描述:
刷题 深度优先搜索(dfs)_第2张图片
解题思路:
bfs 递归。可以想想二叉树中如何递归的进行层序遍历。
bfs 非递归。一般用队列存储。
dfs 递归。最常用,如二叉树的先序遍历。
dfs 非递归。一般用 stack。

采用dfs实现。

  1. 当遍历到边界位置,如果当前为‘O’,则调用dfs将所有相连的‘O’均替换为‘#’。
  2. 遍历二维数组,遇到’O’就替换为‘X’,遇到‘#’就替换为‘O’。
class Solution {
public:
    void dfs(vector<vector<char>>& board,int row,int col)
    {
        if(row<0 || col<0 || row>=board.size() || col>=board[0].size() || board[row][col]=='X' || board[row][col]=='#')
            return;
        if(board[row][col]=='O')
            board[row][col]='#';
        dfs(board,row+1,col);
        dfs(board,row-1,col);
        dfs(board,row,col+1);
        dfs(board,row,col-1);
    }
    void solve(vector<vector<char>>& board) {
        if(board.size()==0)
            return;
        int row=board.size();
        int col=board[0].size();
        for(int i=0;i<row;i++)
            for(int j=0;j<col;j++)
            {
                if((i==0 || j==0 || i==row-1 || j==col-1) && (board[i][j]=='O'))
                    dfs(board,i,j);
            }
         for(int i=0;i<row;i++)
            for(int j=0;j<col;j++)
            {
                if(board[i][j]=='O')
                    board[i][j]='X';
                if(board[i][j]=='#')
                    board[i][j]='O';
            }
    }
};

你可能感兴趣的:(刷题)