Check whether a node is leaf node or not for multiple queries
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++
#include <bits/stdc++.h>
using namespace std;
void init( int degree[], vector<pair< int , int > > edges, int n)
{
for ( int i = 0; i < n; i++) {
degree[i] = 0;
}
for ( int i = 0; i < edges.size(); i++) {
degree[edges[i].first]++;
degree[edges[i].second]++;
}
}
void performQueries(vector<pair< int , int > > edges,
vector< int > q, int n)
{
int degree[n];
init(degree, edges, n);
for ( int i = 0; i < q.size(); i++) {
int node = q[i];
if (node == 0) {
cout << "No\n" ;
continue ;
}
if (degree[node] == 1)
cout << "Yes\n" ;
else
cout << "No\n" ;
}
}
int main()
{
int n = 6;
vector<pair< int , int > > edges = {
{ 0, 1 }, { 0, 2 }, { 1, 3 }, { 1, 4 }, { 4, 5 }
};
vector< int > q = { 0, 3, 4, 5 };
performQueries(edges, q, n);
return 0;
}
|
Java
import java.util.*;
class GFG
{
static class pair
{
int first, second;
public pair( int first, int second)
{
this .first = first;
this .second = second;
}
}
static void init( int degree[],
pair[] edges, int n)
{
for ( int i = 0 ; i < n; i++)
{
degree[i] = 0 ;
}
for ( int i = 0 ; i < edges.length; i++)
{
degree[edges[i].first]++;
degree[edges[i].second]++;
}
}
static void performQueries(pair [] edges,
int []q, int n)
{
int []degree = new int [n];
init(degree, edges, n);
for ( int i = 0 ; i < q.length; i++)
{
int node = q[i];
if (node == 0 )
{
System.out.println( "No" );
continue ;
}
if (degree[node] == 1 )
System.out.println( "Yes" );
else
System.out.println( "No" );
}
}
public static void main(String[] args)
{
int n = 6 ;
pair[] edges = { new pair( 0 , 1 ),
new pair( 0 , 2 ),
new pair( 1 , 3 ),
new pair( 1 , 4 ),
new pair( 4 , 5 )};
int []q = { 0 , 3 , 4 , 5 };
performQueries(edges, q, n);
}
}
|
Python3
def init(degree, edges, n) :
for i in range (n) :
degree[i] = 0 ;
for i in range ( len (edges)) :
degree[edges[i][ 0 ]] + = 1 ;
degree[edges[i][ 1 ]] + = 1 ;
def performQueries(edges, q, n) :
degree = [ 0 ] * n;
init(degree, edges, n);
for i in range ( len (q)) :
node = q[i];
if (node = = 0 ) :
print ( "No" );
continue ;
if (degree[node] = = 1 ) :
print ( "Yes" );
else :
print ( "No" );
if __name__ = = "__main__" :
n = 6 ;
edges = [[ 0 , 1 ], [ 0 , 2 ],
[ 1 , 3 ], [ 1 , 4 ],
[ 4 , 5 ]];
q = [ 0 , 3 , 4 , 5 ];
performQueries(edges, q, n);
|
C#
using System;
class GFG
{
public class pair
{
public int first, second;
public pair( int first, int second)
{
this .first = first;
this .second = second;
}
}
static void init( int []degree,
pair[] edges, int n)
{
for ( int i = 0; i < n; i++)
{
degree[i] = 0;
}
for ( int i = 0; i < edges.Length; i++)
{
degree[edges[i].first]++;
degree[edges[i].second]++;
}
}
static void performQueries(pair [] edges,
int []q, int n)
{
int []degree = new int [n];
init(degree, edges, n);
for ( int i = 0; i < q.Length; i++)
{
int node = q[i];
if (node == 0)
{
Console.WriteLine( "No" );
continue ;
}
if (degree[node] == 1)
Console.WriteLine( "Yes" );
else
Console.WriteLine( "No" );
}
}
public static void Main(String[] args)
{
int n = 6;
pair[] edges = { new pair(0, 1),
new pair(0, 2),
new pair(1, 3),
new pair(1, 4),
new pair(4, 5)};
int []q = { 0, 3, 4, 5 };
performQueries(edges, q, n);
}
}
|
Javascript
<script>
function init(degree, edges, n)
{
for ( var i = 0; i < n; i++) {
degree[i] = 0;
}
for ( var i = 0; i < edges.length; i++) {
degree[edges[i][0]]++;
degree[edges[i][1]]++;
}
}
function performQueries( edges, q, n)
{
var degree = Array(n);
init(degree, edges, n);
for ( var i = 0; i < q.length; i++) {
var node = q[i];
if (node == 0) {
document.write( "No<br>" );
continue ;
}
if (degree[node] == 1)
document.write( "Yes<br>" );
else
document.write( "No<br>" );
}
}
var n = 6;
var edges = [
[ 0, 1 ], [ 0, 2 ], [ 1, 3 ], [ 1, 4 ], [ 4, 5 ]
];
var q = [ 0, 3, 4, 5 ];
performQueries(edges, q, n);
</script>
|
Time complexity: O(n)
Auxiliary Space: O(n).
Last Updated :
13 Aug, 2021
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...