Check if a given tree graph is linear or not (original) (raw)

Last Updated : 7 Sep, 2022

Given a tree check if it is linear or not.

1

/
2 3 Linear as we can form a line 2 1 3

1

/
2 3 /
4 5 Not linear

Examples:

Input : 3 1 2 1 3 Output : YES Explanation: The Tree formed is 2-1-3 which is a linear one.

Input : 4 1 2 2 3 4 2 Output : NO

Approach: The given tree would be linear only if n-2 of its nodes have indegree == 2 or number of nodes, n==1.

Implementation:

C++ `

// A C++ program to check whether a graph is // Linear or not #include<bits/stdc++.h> using namespace std;

// This class represents a undirected graph // using adjacency list representation class Graph { public:

// No. of vertices
int V; 

// Constructor
Graph(int v)
{
    V = v;
}

// Function to add an edge into the graph
void addEdge(vector<int> adj[], int v, int w)
{
    adj[v].push_back(w);
    adj[w].push_back(v);
}

// Returns true if the graph is linear, 
// else false.
bool isLinear(vector<int> adj[])
{
    
    // If the number of vertice is 1 then
    // the tree is always Linear
    if (V == 1)
        return true;

    int count = 0;

    // Counting the number of vertices
    // with indegree 2
    for(int i = 0; i < V; i++)
    {
        if (adj[i].size() == 2)
            count++;
    }
    if (count == V - 2)
        return true;
    else
        return false;
}

};

// Driver code int main() {

// Create a graph given in the 
// above example
Graph g1(3);

vector<int> adj[g1.V];

g1.addEdge(adj, 0, 1);
g1.addEdge(adj, 0, 2);
if (g1.isLinear(adj))
    cout << "YES";
else
    cout << "NO";

return 0;

}

// This code is contributed by pratham76

Java

// A Java Program to check whether a graph is // Linear or not import java.io.; import java.util.;

// This class represents a undirected graph // using adjacency list representation class Graph { private int V; // No. of vertices

// Adjacency List
private LinkedList<Integer> adj[];

// Constructor
Graph(int v)
{
    V = v;
    adj = new LinkedList[v];
    for (int i = 0; i < v; ++i)
        adj[i] = new LinkedList<Integer>();
}

// Function to add an edge into the graph
void addEdge(int v, int w)
{
    adj[v].add(w);
    adj[w].add(v);
}

// Returns true if the graph is linear, 
// else false.
boolean isLinear()
{
    // If the number of vertice is 1 then
    // the tree is always Linear
    if (V == 1)
        return true;
    int count = 0;

    // Counting the number of vertices
    // with indegree 2
    for (int i = 0; i < V; i++) {
        if (adj[i].size() == 2)
            count++;
    }
    if (count == V - 2)
        return true;
    else
        return false;
}

// Driver method
public static void main(String args[])
{
    // Create a graph given in the above example
    Graph g1 = new Graph(3);
    g1.addEdge(0, 1);
    g1.addEdge(0, 2);
    if (g1.isLinear())
        System.out.println("YES");
    else
        System.out.println("NO");
}

}

Python3

A Python3 Program to check whether a

graph is Linear or not

This class represents a undirected

graph using adjacency list representation

class Graph:

def __init__(self, v):
  
      # No. of vertices
    self.V = v 
    
    # Adjacency List
    self.adj = [[] for i in range(v)]

# Function to add an edge into
# the graph
def addEdge(self, v, w):

    self.adj[v].append(w)
    self.adj[w].append(v)

# Returns true if the graph is 
# linear, else false.
def isLinear(self):

    # If the number of vertice is 
      # 1 then the tree is always Linear
    if (self.V == 1):
        return True
      
    count = 0

    # Counting the number of vertices
    # with indegree 2
    for i in range(self.V):
        if (len(self.adj[i]) == 2):
            count += 1
    
    if (count == self.V - 2):
        return True
    else:
        return False

Driver code

if name=='main':

# Create a graph given in the
# above example
g1 = Graph(3)
g1.addEdge(0, 1)
g1.addEdge(0, 2)

if (g1.isLinear()):
    print("YES")
else:
    print("NO")
    

This code is contributed by rutvik_56

C#

// A C# Program to check whether a graph is // Linear or not using System; using System.Collections.Generic;

// This class represents a undirected graph // using adjacency list representation public class Graph { private int V; // No. of vertices

// Adjacency List
private List<int> []adj;

// Constructor
Graph(int v)
{
    V = v;
    adj = new List<int>[v];
    for (int i = 0; i < v; ++i)
        adj[i] = new List<int>();
}

// Function to add an edge into the graph
void addEdge(int v, int w)
{
    adj[v].Add(w);
    adj[w].Add(v);
}

// Returns true if the graph is linear, 
// else false.
bool isLinear()
{
    // If the number of vertice is 1 then
    // the tree is always Linear
    if (V == 1)
        return true;
    int count = 0;

    // Counting the number of vertices
    // with indegree 2
    for (int i = 0; i < V; i++) 
    {
        if (adj[i].Count == 2)
            count++;
    }
    if (count == V - 2)
        return true;
    else
        return false;
}

// Driver Code
public static void Main(String []args)
{
    // Create a graph given in the above example
    Graph g1 = new Graph(3);
    g1.addEdge(0, 1);
    g1.addEdge(0, 2);
    if (g1.isLinear())
        Console.WriteLine("YES");
    else
        Console.WriteLine("NO");
}

}

// This code is contributed by 29AjayKumar

JavaScript

`