深度优先搜索 & 宽度优先搜索
什么时候使用BFS:
- 图的遍历
- 分层的图的遍历(简单图的最短路径)
- 通过一个点,找到图的所有的点,这个用DFS和BFS都可以,如果是图的话,用DFS,很可能导致递归深度太深。
- 拓扑排序
- 最短路径
- 简单图的最短路径(简单图:每条边长度都是1,并且没有方向)
BFS题
BinaryTree Level Order Traversal
- lintcode中binary Tree的testCase:
https://www.lintcode.com/help/binary-tree-representation/
- 非python一般用linkedList来做queue
- 可以用lintcode里面queue的题目来对queue做一下专门练习
Binary Tree Serialization
图上的宽度优先搜索
什么时候使用DFS:
- 当题目目的是找到问题的<b>所有方案</b>的时候用DFS(subsets)
- 深搜只要搜索就行了,只需要存储当前路径(栈),宽搜是需要保存状态的
递归三要素:
- 递归的定义:接收什么参数,返回什么值 …