一、回溯算法理解

本质是以深度遍历的方式遍历决策树

但因为没有具体的TreeNode构成树,所以回溯与DFS遍历树很像,但不同的是回溯要多一步退回选择的操作

典型问题:全排列、N皇后问题

回溯算法的构成要素:

①选择列表

②已选路径或已做出的选择(trace或used)

③结束条件

回溯算法的模板如下:

def backTrace(已选路径, 选择列表) {
	if(结束条件) {
	    return ; // 对于return 如果只问是否有解则返回bool即可;如果要所有的解则用全局变量数组保存所有找到的解
	}
	
    for 某选择:选择列表 {
    	if(不必要选择) {
    	    continue;
    	}
    	做选择:某选择加入已选路径,下一步选择列表是否变化
    	backTrace(已选路径, 选择列表)
    	回退选择:某选择退出已选路径,回退后选择列表是否需要恢复
    }
}

回溯算法的思路如下:

画决策树,决策树节点的属性就是 选择和当前路径 我们的backTrace函数在树的各个节点游走,知道遇到结束条件


Be Water, My Friend.