Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- static Boolean is_it_a_tree(Integer node_count, ArrayList<Integer> edge_start, ArrayList<Integer> edge_end) {
- //Build the tree
- Map<Integer, ArrayList<Integer>> adj_list = new HashMap<>();
- for (int node = 0; node < node_count; node++) {
- adj_list.put(node, new ArrayList<Integer>());
- }
- for (int i = 0; i < edge_start.size(); i++) {
- adj_list.get(edge_start.get(i)).add(edge_end.get(i));
- adj_list.get(edge_end.get(i)).add(edge_start.get(i));
- }
- //Check whether there exist a cycle or not
- int[] visited = new int[node_count];
- int[] parent = new int[node_count];
- for (int node = 0; node < node_count; node++) {
- if (visited[node] == 0) {
- if (!bfs(node, visited, parent, adj_list)) {
- return false;
- }
- }
- }
- return true;
- }
- static Boolean bfs(int node, int[] visited, int[] parent, Map<Integer, ArrayList<Integer>> adj_list) {
- Queue<Integer> q = new LinkedList<>();
- q.offer(node);
- visited[node] = 1;
- while (!q.isEmpty()) {
- int currNode = q.poll();
- for (int neighbor : adj_list.get(currNode)) {
- if (visited[neighbor] == 0) {
- q.offer(neighbor);
- visited[neighbor] = 1;
- parent[neighbor] = currNode;
- } else {
- if (parent[currNode] != neighbor) {
- return false; //this means, it is a cycle
- }
- }
- }
- }
- return true;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement