BFS和DFS在二叉树和图中运用较多;
1.BFS实现方式
基本概念和知识——传送门
1.1 BFS (队列)
BFS实现基本上是基于队列的。众所周知,队列特性,FIFO(先进先出)。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
void BFS(TreeNode *root)
{
queue<int> data;
data.push(root);
while(!data.empty())
{
TreeNode *temp = data.pop();
if(temp->left != NULL)
{
data.push(temp->left);
}
if(temp->right != NULL)
{
data.push(temp->right);
}
}
}
2.DFS
DFS分为两种实现方式:递归、和非递归
递归方式实现较为简单:
下面这种方式也是二叉树的前序遍历
void dfs(TreeNode *root)
{
if(!root)
return;
//进行其他一些处理
/* */
dfs(root->left);
//还可能需要visit数组记录访问状态
dfs(root->right);
}