搜索:在树中寻找特定节点
广度优先
搜索算法场景:在集合中找到突破点,在搜索集中找到突破点
运用方法:递归,队列,堆栈....
人脑:纵观全局
计算机:处理重复
BFS:水滴扩散
递归写法,手动维护队列
深度优先搜索
DFS:一查到底,走到尽头回溯,漏网之鱼
图的深度优先搜索
利用递归写法
非递归写法(了解)
广度、深度区别
例题:二叉树的层次遍历
1.BFS: 横向填充
a.level信息加到队列queue(元素本身,是否为每层终点,每层情况都要加)
b.循环体循环扫描Batch process
2.DFS: 记录每次深度,二维数组,纵向填充
BFS
DFS:二维数组
二叉树的最大深度和最小深度
1.递归
2.DFS O(N)
3.BFS O(N)
括号生成
1.数学归纳法
2.递归搜索(深度优先搜索):每个格子两个选择,2n
3.改进:配比,递归终止条件
剪枝
搜索:围棋剪支,差的去掉,好的留下
N-皇后问题:横竖撇捺
DFS:枚举阶,层次增加排除不可以的
暴力法
剪支,利用数组存下之前放过的行列,撇捺y+x=a,用set
以时间换空间
简洁版
数独
1.朴素DFS
2.加速
搜索递归普通剪枝