利用栈实现。
从源点开始按照深度把节点放入栈中,然后再弹出。
每弹出一个节点,把该节点一个没有进入栈中的节点放入栈中,并把该节点也放入栈中,方便回溯。
直到栈变空。
public static void dfs(Node node) {
if(node == null) {
return;
}
Stack<Node> stack = new Stack<Node>();
HashSet<Node> set = new HashSet<Node>();
stack.push(node);
set.add(node);
System.out.println(node.value);
while(!stack.isEmpty()) {
Node cur = stack.pop();
for(Node next:cur.nexts) {
if(!set.contains(next)) {
stack.push(cur);//把当前元素也压入栈中是为了可以回溯。
//如果不压入栈中,等一条路走不通的时候,无法往后回溯去其他路。
stack.push(next);
set.add(next);
System.out.println(next.value);
break;
}
}
}
}