Given a tree with N vertices numbered from 0 to N – 1 where 0 is the root node. The task is to check if a node is leaf node or not for multiple queries.
Examples:
Input:
0
/ \
1 2
/ \
3 4
/
5
q[] = {0, 3, 4, 5}
Output:
No
Yes
No
Yes
From the graph, 2, 3 and 5 are the only leaf nodes.
Approach: Store the degree of all the vertices in an array degree[]. For each edge from A to B, degree[A] and degree[B] are incremented by 1. Now every node which not a root node and it has a degree of 1 is a leaf node and all the other nodes are not.
Below is the implementation of the above approach:
C++
// C++ implementation of the approach#include <bits/stdc++.h>using namespace std;// Function to calculate the degree of all the verticesvoid init(int degree[], vector<pair<int, int> > edges, int n){ // Initializing degree of all the vertices as 0 for (int i = 0; i < n; i++) { degree[i] = 0; } // For each edge from A to B, degree[A] and degree[B] // are increased by 1 for (int i = 0; i < edges.size(); i++) { degree[edges[i].first]++; degree[edges[i].second]++; }}// Function to perform the queriesvoid performQueries(vector<pair<int, int> > edges, vector<int> q, int n){ // To store the of degree // of all the vertices int degree[n]; // Calculate the degree for all the vertices init(degree, edges, n); // For every query for (int i = 0; i < q.size(); i++) { int node = q[i]; if (node == 0) { cout << "No\n"; continue; } // If the current node has 1 degree if (degree[node] == 1) cout << "Yes\n"; else cout << "No\n"; }}// Driver codeint main(){ // Number of vertices int n = 6; // Edges of the tree vector<pair<int, int> > edges = { { 0, 1 }, { 0, 2 }, { 1, 3 }, { 1, 4 }, { 4, 5 } }; // Queries vector<int> q = { 0, 3, 4, 5 }; // Perform the queries performQueries(edges, q, n); return 0;} |
Java
// Java implementation of the approachimport java.util.*;class GFG {static class pair{ int first, second; public pair(int first, int second) { this.first = first; this.second = second; } } // Function to calculate the degree // of all the verticesstatic void init(int degree[], pair[] edges, int n){ // Initializing degree of // all the vertices as 0 for (int i = 0; i < n; i++) { degree[i] = 0; } // For each edge from A to B, // degree[A] and degree[B] // are increased by 1 for (int i = 0; i < edges.length; i++) { degree[edges[i].first]++; degree[edges[i].second]++; }}// Function to perform the queriesstatic void performQueries(pair [] edges, int []q, int n){ // To store the of degree // of all the vertices int []degree = new int[n]; // Calculate the degree for all the vertices init(degree, edges, n); // For every query for (int i = 0; i < q.length; i++) { int node = q[i]; if (node == 0) { System.out.println("No"); continue; } // If the current node has 1 degree if (degree[node] == 1) System.out.println("Yes"); else System.out.println("No"); }}// Driver codepublic static void main(String[] args){ // Number of vertices int n = 6; // Edges of the tree pair[] edges = {new pair(0, 1), new pair(0, 2), new pair(1, 3), new pair(1, 4), new pair(4, 5)}; // Queries int []q = { 0, 3, 4, 5 }; // Perform the queries performQueries(edges, q, n);}}// This code is contributed by Rajput-Ji |
Python3
# Python3 implementation of the approach # Function to calculate the degree# of all the vertices def init(degree, edges, n) : # Initializing degree of # all the vertices as 0 for i in range(n) : degree[i] = 0; # For each edge from A to B, # degree[A] and degree[B] # are increased by 1 for i in range(len(edges)) : degree[edges[i][0]] += 1; degree[edges[i][1]] += 1; # Function to perform the queries def performQueries(edges, q, n) : # To store the of degree # of all the vertices degree = [0] * n; # Calculate the degree for all the vertices init(degree, edges, n); # For every query for i in range(len(q)) : node = q[i]; if (node == 0) : print("No"); continue; # If the current node has 1 degree if (degree[node] == 1) : print("Yes"); else : print("No"); # Driver code if __name__ == "__main__" : # Number of vertices n = 6; # Edges of the tree edges = [[ 0, 1 ], [ 0, 2 ], [ 1, 3 ], [ 1, 4 ], [ 4, 5 ]]; # Queries q = [ 0, 3, 4, 5 ]; # Perform the queries performQueries(edges, q, n); # This code is contributed by AnkitRai01 |
C#
// C# implementation of the approachusing System; class GFG {public class pair{ public int first, second; public pair(int first, int second) { this.first = first; this.second = second; } } // Function to calculate the degree // of all the verticesstatic void init(int []degree, pair[] edges, int n){ // Initializing degree of // all the vertices as 0 for (int i = 0; i < n; i++) { degree[i] = 0; } // For each edge from A to B, // degree[A] and degree[B] // are increased by 1 for (int i = 0; i < edges.Length; i++) { degree[edges[i].first]++; degree[edges[i].second]++; }}// Function to perform the queriesstatic void performQueries(pair [] edges, int []q, int n){ // To store the of degree // of all the vertices int []degree = new int[n]; // Calculate the degree for all the vertices init(degree, edges, n); // For every query for (int i = 0; i < q.Length; i++) { int node = q[i]; if (node == 0) { Console.WriteLine("No"); continue; } // If the current node has 1 degree if (degree[node] == 1) Console.WriteLine("Yes"); else Console.WriteLine("No"); }}// Driver codepublic static void Main(String[] args){ // Number of vertices int n = 6; // Edges of the tree pair[] edges = {new pair(0, 1), new pair(0, 2), new pair(1, 3), new pair(1, 4), new pair(4, 5)}; // Queries int []q = { 0, 3, 4, 5 }; // Perform the queries performQueries(edges, q, n);}}// This code is contributed by 29AjayKumar |
Javascript
<script>// JavaScript implementation of the approach// Function to calculate the degree of all the verticesfunction init(degree, edges, n){ // Initializing degree of all the vertices as 0 for (var i = 0; i < n; i++) { degree[i] = 0; } // For each edge from A to B, degree[A] and degree[B] // are increased by 1 for (var i = 0; i < edges.length; i++) { degree[edges[i][0]]++; degree[edges[i][1]]++; }}// Function to perform the queriesfunction performQueries( edges, q, n){ // To store the of degree // of all the vertices var degree = Array(n); // Calculate the degree for all the vertices init(degree, edges, n); // For every query for (var i = 0; i < q.length; i++) { var node = q[i]; if (node == 0) { document.write( "No<br>"); continue; } // If the current node has 1 degree if (degree[node] == 1) document.write( "Yes<br>"); else document.write( "No<br>"); }}// Driver code// Number of verticesvar n = 6;// Edges of the treevar edges = [ [ 0, 1 ], [ 0, 2 ], [ 1, 3 ], [ 1, 4 ], [ 4, 5 ]];// Queriesvar q = [ 0, 3, 4, 5 ];// Perform the queriesperformQueries(edges, q, n);</script> |
No Yes No Yes
Time complexity: O(n)
Auxiliary Space: O(n).
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!
