DFS深搜(使用回溯法)
何为DFS深搜?即先一条道走到黑,不管中途遇到什么岔路口都不停,直到这条道没后面的路了,再回到前一个岔路口,继续一条道走到黑。不断回溯,直到全部节点都被搜完。
优缺点
- 空间复杂度:与深度成正比,假设深度为n,则为O(n)
- 可能会存在爆栈的危险。
- 不能搜最短路径,最小等问题
public static void DFS(int v){//图的深搜
visited[v]=true;
for (int i = 0; i < a[0].length; i++) {
if (check()&&visited[i]==false){
DFS(i);//回溯
}
}
}
public static void DFS(TreeNode head){//树的深搜使用回溯
if (head==null)return;
check();//满足条件的check();
if (head.left!=null){
DFS(head.left);
}if (head.right!=null){
DFS(head.right);
}
}
BFS宽搜(使用队列)
何为BFS宽搜?即由一点逐级往下搜索,以图为例,