宽度与深度优先遍历
Posted 不做油腻的中年大叔
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了宽度与深度优先遍历相关的知识,希望对你有一定的参考价值。
一、方法
宽度优先与深度优先遍历的重要性不言而喻
宽度优先遍历
利用队列实现
从源节点开始依次按照宽度进队列,然后弹出
每弹出一个点,把该节点所有没有进过队列的邻接点放入队列
直到队列变空
深度优先遍历
利用栈实现
从源节点开始把节点按照深度放入栈,然后弹出
每弹出一个点,把该节点下一个没有进过栈的邻接点放入栈
直到栈变空
二、代码
//宽度
public static void BFS(Node node){
if(node == null){
return ;
}
Queue<Node> queue = new LinkedList<>();
HashSet<Node> set = new HashSet<>();
queue.add(node);
set.add(node);
while(!queue.isEmpty()){
node = queue.poll();
System.out.println(node.value);
for(Node next : node.nexts){
if(!set.contains(next)){
set.add(next);
queue.add(next);
}
}
}
}
//深度
public static void DFS(Node node){
if(node == null){
return ;
}
Stack<Node> stack = new Stack<>();
HashSet<Node> set = new HashSet<>();
stack.push(node);
set.add(node);
while(!stack.isEmpty()){
node = stack.pop();
System.out.print(node.value + " ");
for(Node next : node.nexts){
if(!set.contains(next)){
set.add(next);
stack.push(next);
}
}
}
}
如果面试官让你不用队列来实现宽度优先,不让用栈实现深度优先遍历,你知道怎么做吗?答案在摘要中!
以上是关于宽度与深度优先遍历的主要内容,如果未能解决你的问题,请参考以下文章