题目描述:
给定从 0 到 n-1 标号的 n 个结点,和一个无向边列表(每条边以结点对来表示),请编写一个函数用来判断这些边是否能够形成一个合法有效的树结构。
示例 1:
输入: n = 5, 边列表 edges = [[0,1], [0,2], [0,3], [1,4]]
输出: true
示例 2:
输入: n = 5, 边列表 edges = [[0,1], [1,2], [2,3], [1,3], [1,4]]
输出: false
注意:你可以假定边列表 edges 中不会出现重复的边。由于所有的边是无向边,边 [0,1] 和边 [1,0] 是相同的,因此不会同时出现在边列表 edges 中。
方法1:
主要思路:
(1)广度优先搜索;
(2)首先,边的数量要比点的数量少1;
(3)根据输入的边,建立连接图;
(4)使用广度优先遍历整个图,并标记图中遍历过的结点;
(5)最终遍历过的结点的数量应该等于总的结点的数量;
class Solution {
public:
bool validTree(int n, vector<vector<int>>& edges) {
if(edges.size()!=n-1){
return false;
}
vector<bool> lables(n,false);
vector<vector<int>> mp(n);
for(vector<int>& vec:edges)