您的位置:首页 > 其它

DFS、BFS和Backtracking模板

2016-11-01 11:33 330 查看

搜索问题的解法

DFS(深度优先搜索)

BFS(广度优先搜索)

backtracking(回溯)

DFS模板

void dfs(...)
{
// 结束递归的条件
if (...) {
..... // 把“当前结果” 加入 “结果集容器” 中
return;
}

// 继续递归,里面可能有回溯,也可能没有
if (...) {

... // 在容器中保存当前数据
dfs()
... // 在容器中删除上面保存的数据(注:这种情况下就称为回溯,很明显它是dfs的一个步骤)
}
}


难点

寻找dfs结束条件

继续dfs的条件

题目

78. Subsets

93. Restore IP Addresses

BFS模板

模板1

void bfs(...)
{
queue q;
q.push(startRoot);
while (!q.empty()) {
// 按照节点处理
curNode = q.front();
q.pop();

if (...) {
// 处理curNode,并把curNode的相邻Nodes加入队列
}
}

}


模板2

void bfs(...)
{
queue q;
q.push(startRoot);
while (!q.empty()) {
// 按照层次处理
size = q.size();
for (i = 0; i < size; i++) {
curNode = q.front();
q.pop();

if (... ) {
// 处理curNode,并把curNode的相邻Nodes加入队列
}
}
}

}


题目

199. Binary Tree Right Side View

参考

Restore IP Addresses
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: