Compruebe si un Node es un Node hoja o no para múltiples consultas

Dado un árbol con N vértices numerados de 0 a N – 1 donde 0 es el Node raíz. La tarea es verificar si un Node es un Node hoja o no para múltiples consultas.
Ejemplos: 
 

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.

Enfoque: almacene el grado de todos los vértices en una array grado[] . Para cada borde de A a B , el grado[A] y el grado[B] se incrementan en 1 . Ahora, cada Node que no es un Node raíz y tiene un grado de 1 es un Node hoja y todos los demás Nodes no lo son.
A continuación se muestra la implementación del enfoque anterior: 
 

C++

// C++ implementation of the approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to calculate the degree of all the vertices
void 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 queries
void 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 code
int 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 approach
import 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 vertices
static 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 queries
static 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 code
public 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 approach
using 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 vertices
static 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 queries
static 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 code
public 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 vertices
function 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 queries
function 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 vertices
var n = 6;
// Edges of the tree
var edges = [
    [ 0, 1 ], [ 0, 2 ], [ 1, 3 ], [ 1, 4 ], [ 4, 5 ]
];
// Queries
var q = [ 0, 3, 4, 5 ];
// Perform the queries
performQueries(edges, q, n);
 
</script>
Producción: 

No
Yes
No
Yes

 

Complejidad temporal: O(n)
Espacio auxiliar : O(n). 
 

Publicación traducida automáticamente

Artículo escrito por Pratims10 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *