DFS
1、DFS(深度优先搜索),“深度优先的含义”是优先往某一个方向
搜索,其他未搜索到的在这个方向搜索到底后再返回一个一个的搜索。
2、类似一棵树的前序遍历
;
3、适合目标明确,以找到目标为主要目的的情况。
回溯
回溯与DFS的关系,和回溯问题的解法参考这
总的来说:DFS 是一个劲的往某一个方向搜索,而回溯算法是建立在 DFS 基础之上的
,但不同的是在搜索过程中,达到结束条件后,恢复状态,回溯上一层,再次搜索。因此回溯算法与 DFS 的区别就是有无状态重置
。
再次理解
:
【回溯法是求问题的解,使用的是DFS(深度优先搜索)。在DFS的过程中发现不是问题的解,那么就开始回溯到上一层或者上一个节点。DFS是遍历整个搜索空间,而不管是否是问题的解。所以更觉得回溯法是DFS的一种应用,DFS更像是一种工具
。】
BFS
1、BFS(广度优先搜索),具有层次搜索;
2、类似树的层序遍历
;
3、适合在不断扩大遍历范围时找到相对最优解的情况。
vector<vector<int>> levelOrder(TreeNode* root) {
//1、初始化:一个队列queue<TreeNode*> q, 将root节点入队列
queue<TreeNode*> q;
q.push(root);
//2、如果队列不空(每次判断的队列,其包含二叉树同一层节点),做如下操作:
while(q.size())
{
int size=q.size();
//...
for(int i=0;i<size;i++)
{
///3、弹出队列头,保存为node,将node的左右非空孩子加入队列
TreeNode* rt=q.front();q.pop();
//...
if(rt->left) q.push(rt->left);
if(rt->right) q.push(rt->right);
}
}
//return ...
}