1. 相同树(leetcode 100)
给定两个二叉树,编写一个函数来检验它们是否相同。
如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
解题思路:最简单的思路即遍历每一个节点,指不相等返回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)
题目描述:
解题思路:
bfs 递归。可以想想二叉树中如何递归的进行层序遍历。
bfs 非递归。一般用队列存储。
dfs 递归。最常用,如二叉树的先序遍历。
dfs 非递归。一般用 stack。
采用dfs实现。
- 当遍历到边界位置,如果当前为‘O’,则调用dfs将所有相连的‘O’均替换为‘#’。
- 遍历二维数组,遇到’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';
}
}
};
来源:https://blog.csdn.net/qq_31467305/article/details/100171261