Java是一个高效、可靠的编程语言,它有着广泛的应用领域。其中,广度和深度遍历是Java语言中非常重要的算法。
广度遍历又称为宽度优先遍历,是一种基于队列实现的算法。它的策略是先访问一个节点的所有相邻节点,然后再访问这些相邻节点的相邻节点,以此类推,直到遍历结束。它一般用于解决最短路径和连通块问题,比如在搜索引擎中查找最短路径。
public void breadthFirstSearch(Node root) { Queuequeue = new LinkedList<>(); queue.add(root); while (!queue.isEmpty()) { Node node = queue.poll(); if (node != null) { visit(node); for (Node adjNode : node.getAdjNodes()) { if (!adjNode.isVisited()) { adjNode.setVisited(true); queue.add(adjNode); } } } } }
深度遍历又称为深度优先遍历,是一种基于栈实现的算法。它的策略是先访问一个节点,然后递归访问这个节点的第一个未被访问的相邻节点,再返回递归点,访问它的下一个未被访问的相邻节点,直到该节点没有未被访问的相邻节点为止。
public void depthFirstSearch(Node root) { if (root == null) { return; } visit(root); root.setVisited(true); for (Node adjNode : root.getAdjNodes()) { if (!adjNode.isVisited()) { depthFirstSearch(adjNode); } } }
无论是广度遍历还是深度遍历,都是很重要的算法,而Java语言恰好提供了队列和栈等数据结构,方便我们实现这两种遍历算法。