Please solve the programming task below using a self-contained code snippet in a markdown code block.

You have a graph of n nodes labeled from 0 to n - 1. You are given an integer n and a list of edges where edges[i] = [ai, bi] indicates that there is an undirected edge between nodes ai and bi in the graph.
Return true if the edges of the given graph make up a valid tree, and false otherwise.
 
Please complete the following python code precisely:
```python
class Solution:
    def validTree(self, n: int, edges: List[List[int]]) -> bool:
```