多叉树的遍历框架
/*多叉树遍历框架*/
void traverse(TreeNode root){
if(root == null) return;
for(TreeNode child : root.children){
traverse(child);
}
}
图在遍历中可能包含环,从图的某一点开始遍历,可能又回到了这一节点。
如果图中包含环,遍历中需要一个visited 数组进行辅助:
//记录已经遍历过得节点
boolean[] visited;
boolean[] onPath;
/*图遍历框架*/
void traverse(Graph graph,int s){
if(visited[s]) return;
//经过节点s,标记为已遍历
visited[s] = true;
//标记节点s在路径上
onPath[s] = true;
for(int neirhbor : graph.neighbors(s)){
traverse(graph,neighbor);
}
//节点s离开路径
onPath[s] = false;
}
onPath数组的操作向回溯算法中的【做选择】和【撤销选择】
区别在于:
- 回溯算法的【做选择】和【撤销选择】在for循环里面;
- onPath数组的操作在for循环外面。