我想使用深度優先搜索來查找樹中的頂點/節點。我能夠創建DFS算法,但我不知道如何將樹轉換爲代碼,以便我可以通過下面的鏈接中的算法處理它 JavaScript Depth-first search使用深度優先搜索在樹中找到節點
這就是我所能做的
Vertex nodeA = new Vertex();
Vertex nodeB = new Vertex();
Vertex nodeC = new Vertex();
Vertex nodeD = new Vertex();
Vertex nodeE = new Vertex();
Vertex nodeF = new Vertex();
Vertex nodeG = new Vertex();
Vertex nodeH = new Vertex();
nodeA.name = "a";
nodeB.name = "b";
nodeC.name = "c";
nodeD.name = "d";
nodeE.name = "e";
nodeF.name = "f";
nodeG.name = "g";
nodeH.name = "h";
nodeA.nextNeighbor.add(nodeB);
nodeA.nextNeighbor.add(nodeC);
nodeB.nextNeighbor.add(nodeD);
nodeB.nextNeighbor.add(nodeE);
nodeB.nextNeighbor.add(nodeF);
nodeC.nextNeighbor.add(nodeG);
nodeG.nextNeighbor.add(nodeH);
這是樹結構。
a
/\
b c
/|\ \
d e f g
|
h
這是我的代碼
class Neighbor {
public int vertexNum;
public Neighbor next;
public Neighbor(int vnum, Neighbor nbr) {
this.vertexNum = vnum;
next = nbr;
}
}
class Vertex {
String name;
Neighbor adjList;
Vertex(String name, Neighbor neighbors) {
this.name = name;
this.adjList = neighbors;
}
}
private void dfs(int v, boolean[] visited) {
visited[v] = true;
System.out.println("visiting " + adjLists[v].name);
for (Neighbor nbr=adjLists[v].adjList; nbr != null; nbr=nbr.next) {
if (!visited[nbr.vertexNum]) {
System.out.println("\n" + adjLists[v].name + "--" + adjLists[nbr.vertexNum].name);
dfs(nbr.vertexNum, visited);
}
}
}
public void dfs() {
boolean[] visited = new boolean[adjLists.length];
for (int v=0; v < visited.length; v++) {
if (!visited[v]) {
System.out.println("\nSTARTING AT " + adjLists[v].name);
dfs(v, visited);
}
}
}
你基本上使用一個FIFO數據結構(數組/隊列),它將遍歷BFS中的樹。您將需要使用LIFO數據結構(堆棧)才能獲得DFS遍歷。 – user1952500
@ user1952500你的意思是像我在下面發佈的東西? –
如果您想用新代碼回覆其他用戶,請不要回答您不確定的代碼(除非它確實回答了最初的問題) –