diff --git a/graph-valid-tree/Leo.py b/graph-valid-tree/Leo.py new file mode 100644 index 000000000..817ff1715 --- /dev/null +++ b/graph-valid-tree/Leo.py @@ -0,0 +1,18 @@ +class Solution: + def validTree(self, n: int, edges: List[List[int]]) -> bool: + # filter false cases by definition of tree + if n - 1 != len(edges): + return False + + nodes = set() + + for i, edge in enumerate(edges): + nodes.add(edge[0]) + nodes.add(edge[1]) + + if i + 1 > len(nodes) - 1: + return False + + return True + + ## TC: O(num(edges)), SC: P(num(nodes)) diff --git a/number-of-connected-components-in-an-undirected-graph/Leo.py b/number-of-connected-components-in-an-undirected-graph/Leo.py new file mode 100644 index 000000000..c2161a226 --- /dev/null +++ b/number-of-connected-components-in-an-undirected-graph/Leo.py @@ -0,0 +1,26 @@ +class Solution: + def countComponents(self, n: int, edges: List[List[int]]) -> int: + + graph = collections.defaultdict(list) + + for x, y in edges: + graph[x].append(y) + graph[y].append(x) + + def dfs(node, visited): + visited.add(node) + for neighbor in graph[node]: + if neighbor not in visited: + dfs(neighbor, visited) + + count = 0 + visited = set() + + for node in range(n): + if node not in visited: + dfs(node, visited) + count += 1 + + return count + + ## TC && SC: O(num(edge) + num(node))