Skip to content

Commit 91e5dda

Browse files
committed
add depth first traversal iterative method to graph class
1 parent 4dbad3d commit 91e5dda

File tree

1 file changed

+33
-13
lines changed

1 file changed

+33
-13
lines changed

Graph/graph.js

+33-13
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,14 @@ class graph {
4040
}
4141
delete this.adjacencyList[vertex];
4242
}
43-
depthfirst_traversal(startNode) {
44-
43+
depthfirst_traversal_recursive(startNode) {
4544
const results = [];
4645
const visited_vertices = {};
4746
const adjacencyList = this.adjacencyList;
4847

4948
function dfs(vertex) {
50-
if (!vertex) { //if vertex is empty
49+
if (!vertex) {
50+
//if vertex is empty
5151
return null;
5252
}
5353
visited_vertices[vertex] = true;
@@ -58,16 +58,35 @@ class graph {
5858
// dfs(v);
5959
// }
6060
// } //second way:
61-
adjacencyList[vertex].forEach(neighbor => {
61+
adjacencyList[vertex].forEach((neighbor) => {
6262
if (!visited_vertices[neighbor]) {
6363
return dfs(neighbor);
6464
}
65-
})
65+
});
6666
}
6767
dfs(startNode);
6868
console.log(visited_vertices);
6969
return results;
7070
}
71+
depthfirst_traversal_iterative(startNode) {
72+
const stack = [startNode];
73+
const visited_vertices = {};
74+
const result = [];
75+
let currentVertex;
76+
visited_vertices[startNode] = true;
77+
while (stack.length) {
78+
console.log(stack);
79+
currentVertex = stack.pop();
80+
result.push(currentVertex);
81+
this.adjacencyList[currentVertex].forEach((neighbor) => {
82+
if (!visited_vertices[neighbor]) {
83+
visited_vertices[neighbor] = true;
84+
stack.push(neighbor);
85+
}
86+
});
87+
}
88+
return result;
89+
}
7190
}
7291

7392
let g = new graph();
@@ -98,12 +117,13 @@ g.addVertex("D");
98117
g.addVertex("E");
99118
g.addVertex("F");
100119

101-
g.addEdge('A', 'B');
102-
g.addEdge('A', 'C');
103-
g.addEdge('B', 'D');
104-
g.addEdge('C', 'E');
105-
g.addEdge('D', 'E');
106-
g.addEdge('D', 'F');
107-
g.addEdge('E', 'F');
120+
g.addEdge("A", "B");
121+
g.addEdge("A", "C");
122+
g.addEdge("B", "D");
123+
g.addEdge("C", "E");
124+
g.addEdge("D", "E");
125+
g.addEdge("D", "F");
126+
g.addEdge("E", "F");
108127
console.log(g.adjacencyList);
109-
console.log(g.depthfirst_traversal('A'));
128+
// console.log(g.depthfirst_traversal_recursive);
129+
console.log(g.depthfirst_traversal_iterative("A"));

0 commit comments

Comments
 (0)