Problem
Given n nodes labeled from 0 to n - 1 and a list of undirected edges (each edge is a pair of nodes), write a function to check whether these edges make up a valid tree.
ExampleGiven n = 5 and edges = [[0, 1], [0, 2], [0, 3], [1, 4]], return true.
Given n = 5 and edges = [[0, 1], [1, 2], [2, 3], [1, 3], [1, 4]], return false.
You can assume that no duplicate edges will appear in edges. Since all edges are undirected, [0, 1] is the same as [1, 0] and thus will not appear together in edges.
Solutionpublic class Solution { int[] parents; public boolean validTree(int n, int[][] edges) { if (n-1 != edges.length) { return false; } parents = new int[n]; //initialize n nodes as each own parent for (int i = 0; i < n; i++) { parents[i] = i; } for (int i = 0; i < n-1; i++) { if (find(edges[i][0]) == find(edges[i][1])) { return false; //if two nodes on edge[i] have the same parent, this edge makes a circle causing it invalid } else union(edges[i][0], edges[i][1]); //else union the two nodes on edge[i] } return true; } public int find(int node) { //find the very first parent node, which is when the parent is the node itself if (parents[node] == node) { return node; } //find parent recursively return find(parents[node]); } public void union(int a, int b) { int finda = parents[a], findb = parent[b]; //when node a and node b have different ancient parents, union them with the same parent if (finda != findb) { parents[finda] = findb; } } }Update 2018-10
class Solution { public boolean validTree(int n, int[][] edges) { if (edges.length != n-1) return false; int[] nums = new int[n]; Arrays.fill(nums, -1); for (int i = 0; i < edges.length; i++) { int x = find(nums, edges[i][0]); int y = find(nums, edges[i][1]); if (x == y) return false; nums[x] = y; } return true; } private int find(int[] nums, int k) { if (nums[k] == -1) return k; else return find(nums, nums[k]); } }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/65399.html
摘要:這樣就將一個集合的節(jié)點(diǎn)歸屬到同一個集合號下了。最后如果并查集中只有一個集合,則說明可以構(gòu)建樹。 Graph Valid Tree Given n nodes labeled from 0 to n - 1 and a list of undirected edges (each edge is a pair of nodes), write a function to check w...
摘要:只有一個連通分量還沒有環(huán),就是樹,無根樹。無向圖邊的兩端是對稱的,無向圖講究連通這個概念,沒有方向,沒有拓?fù)?,很像集合,所以非常適合用并查集來解決。并查集寫法參考注意方法用找的老大哥,合并的是的老大哥。 Graph Valid Tree Given n nodes labeled from 0 to n - 1 and a list of undirected edges (each...
摘要:題目鏈接檢查圖的連通性及是否有環(huán),可以,,從一個點(diǎn)出發(fā)看能不能遍歷所有的點(diǎn),同時來檢查是否有環(huán)。還可以用檢查是否有環(huán),最后看的數(shù)量是否等于來判斷是不是。 261. Graph Valid Tree 題目鏈接:https://leetcode.com/problems... 檢查圖的連通性及是否有環(huán),可以dfs,bfs,從一個點(diǎn)出發(fā)看能不能遍歷所有的點(diǎn),同時visited來檢查是否有環(huán)。...
Problem In this problem, a tree is an undirected graph that is connected and has no cycles. The given input is a graph that started as a tree with N nodes (with distinct values 1, 2, ..., N), with one...
Problem Equations are given in the format A / B = k, where A and B are variables represented as strings, and k is a real number (floating point number). Given some queries, return the answers. If the ...
閱讀 1791·2021-10-12 10:12
閱讀 2547·2021-09-29 09:42
閱讀 2723·2021-09-03 10:28
閱讀 2258·2019-08-30 15:54
閱讀 1164·2019-08-30 15:53
閱讀 1398·2019-08-30 11:26
閱讀 3364·2019-08-30 11:02
閱讀 2146·2019-08-30 11:02