Skip to content

Commit 727fb27

Browse files
authored
add graph valid tree solution
1 parent 3948a06 commit 727fb27

File tree

1 file changed

+57
-0
lines changed

1 file changed

+57
-0
lines changed

graph-valid-tree/Tessa1217.java

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
public class Solution {
2+
/**
3+
* @param n: An integer
4+
* @param edges: a list of undirected edges
5+
* @return: true if it's a valid tree, or false
6+
*/
7+
// 시간 복잡도: O(n), 공간복잡도: O(n)
8+
public boolean validTree(int n, int[][] edges) {
9+
10+
if (edges.length != (n - 1)) {
11+
return false;
12+
}
13+
14+
List<Integer>[] graph = new ArrayList[n];
15+
for (int i = 0; i < n; i++) {
16+
graph[i] = new ArrayList<>();
17+
}
18+
19+
for (int[] edge : edges) {
20+
graph[edge[0]].add(edge[1]);
21+
graph[edge[1]].add(edge[0]);
22+
}
23+
24+
boolean[] visited = new boolean[n];
25+
26+
if (!dfs(0, -1, visited, graph)) {
27+
return false;
28+
}
29+
30+
for (boolean v : visited) {
31+
if (!v) {
32+
return false; // Not fully connected
33+
}
34+
}
35+
36+
return true;
37+
}
38+
39+
private boolean dfs(int node, int parent, boolean[] visited, List<Integer>[] graph) {
40+
if (visited[node]) {
41+
return false; // Found a cycle
42+
}
43+
44+
visited[node] = true;
45+
46+
for (int neighbor : graph[node]) {
47+
if (neighbor != parent) {
48+
if (!dfs(neighbor, node, visited, graph)) {
49+
return false;
50+
}
51+
}
52+
}
53+
54+
return true;
55+
}
56+
}
57+

0 commit comments

Comments
 (0)