Skip to content
Related Articles
Total nodes traversed in Euler Tour Tree
• Difficulty Level : Easy
• Last Updated : 23 Jun, 2021

Euler tour of tree has been already discussed which flattens the hierarchical structure of tree into array which contains exactly 2*N-1 values. In this post, the task is to prove that the degree of Euler Tour Tree is 2 times the number of nodes minus one. Here degree means the total number of nodes get traversed in Euler Tour.
Examples:

Input: Output: 15
Input: Output: 17

Explanation:
Using Example 1: where It can be seen that each node’s count in Euler Tour is exactly equal to the out-degree of node plus 1.
Mathematically, it can be represented as:  Where
Total represents total number of nodes in Euler Tour Tree represents ith node in given Tree
N represents the total number of node in given Tree represents number of child of ## C++

 // C++ program to check the number of nodes// in Euler Tour tree.#include using namespace std; #define MAX 1001 // Adjacency list representation of treevector<int> adj[MAX]; // Function to add edges to treevoid add_edge(int u, int v){    adj[u].push_back(v);} // Program to check if calculated Value is// equal to 2*size-1void checkTotalNumberofNodes(int actualAnswer,                              int size){    int calculatedAnswer = size;     // Add out-degree of each node    for (int i = 1; i <= size; i++)        calculatedAnswer += adj[i].size();     if (actualAnswer == calculatedAnswer)        cout << "Calculated Answer is " << calculatedAnswer                     << " and is Equal to Actual Answer\n";    else        cout << "Calculated Answer is Incorrect\n";}int main(){ // Constructing 1st tree from example    int N = 8;    add_edge(1, 2);    add_edge(1, 3);    add_edge(2, 4);    add_edge(2, 5);    add_edge(3, 6);    add_edge(3, 7);    add_edge(6, 8);     // Out_deg[node[i]] is equal to adj[i].size()    checkTotalNumberofNodes(2 * N - 1, N);     // clear previous stored tree    for (int i = 1; i <= N; i++)        adj[i].clear();     // Constructing 2nd tree from example    N = 9;    add_edge(1, 2);    add_edge(1, 3);    add_edge(2, 4);    add_edge(2, 5);    add_edge(2, 6);    add_edge(3, 9);    add_edge(5, 7);    add_edge(5, 8);     // Out_deg[node[i]] is equal to adj[i].size()    checkTotalNumberofNodes(2 * N - 1, N);     return 0;}

## Java

 // Java program to check the number of nodes// in Euler Tour tree.import java.util.*; class GFG{    static final int MAX = 1001;     // Adjacency list representation of tree    static Vector[] adj = new Vector[MAX];     // Function to add edges to tree    static void add_edge(int u, int v)    {        adj[u].add(v);    }     // Program to check if calculated Value is    // equal to 2*size-1    static void checkTotalNumberofNodes(int actualAnswer,                                        int size)    {        int calculatedAnswer = size;         // Add out-degree of each node        for (int i = 1; i <= size; i++)            calculatedAnswer += adj[i].size();         if (actualAnswer == calculatedAnswer)            System.out.print("Calculated Answer is " +                                    calculatedAnswer +                  " and is Equal to Actual Answer\n");        else            System.out.print("Calculated Answer is Incorrect\n");    }     // Driver Code    public static void main(String[] args)    {        for (int i = 0; i < MAX; i++)            adj[i] = new Vector();                     // Constructing 1st tree from example        int N = 8;        add_edge(1, 2);        add_edge(1, 3);        add_edge(2, 4);        add_edge(2, 5);        add_edge(3, 6);        add_edge(3, 7);        add_edge(6, 8);         // Out_deg[node[i]] is equal to adj[i].size()        checkTotalNumberofNodes(2 * N - 1, N);         // clear previous stored tree        for (int i = 1; i <= N; i++)            adj[i].clear();         // Constructing 2nd tree from example        N = 9;        add_edge(1, 2);        add_edge(1, 3);        add_edge(2, 4);        add_edge(2, 5);        add_edge(2, 6);        add_edge(3, 9);        add_edge(5, 7);        add_edge(5, 8);         // Out_deg[node[i]] is equal to adj[i].size()        checkTotalNumberofNodes(2 * N - 1, N);    }} // This code is contributed by Rajput-Ji

## C#

 // C# program to check the number// of nodes in Euler Tour tree.using System;using System.Collections.Generic; class GFG{    static readonly int MAX = 1001;     // Adjacency list representation of tree    static List<int>[] adj = new List<int>[MAX];     // Function to add edges to tree    static void add_edge(int u, int v)    {        adj[u].Add(v);    }     // Program to check if calculated Value is    // equal to 2*size-1    static void checkTotalNumberofNodes(int actualAnswer,                                        int size)    {        int calculatedAnswer = size;         // Add out-degree of each node        for (int i = 1; i <= size; i++)            calculatedAnswer += adj[i].Count;         if (actualAnswer == calculatedAnswer)            Console.Write("Calculated Answer is " +                                 calculatedAnswer +               " and is Equal to Actual Answer\n");        else            Console.Write("Calculated Answer " +                              "is Incorrect\n");    }     // Driver Code    public static void Main(String[] args)    {        for (int i = 0; i < MAX; i++)            adj[i] = new List<int>();                     // Constructing 1st tree from example        int N = 8;        add_edge(1, 2);        add_edge(1, 3);        add_edge(2, 4);        add_edge(2, 5);        add_edge(3, 6);        add_edge(3, 7);        add_edge(6, 8);         // Out_deg[node[i]] is equal to adj[i].Count        checkTotalNumberofNodes(2 * N - 1, N);         // clear previous stored tree        for (int i = 1; i <= N; i++)            adj[i].Clear();         // Constructing 2nd tree from example        N = 9;        add_edge(1, 2);        add_edge(1, 3);        add_edge(2, 4);        add_edge(2, 5);        add_edge(2, 6);        add_edge(3, 9);        add_edge(5, 7);        add_edge(5, 8);         // Out_deg[node[i]] is equal to adj[i].Count        checkTotalNumberofNodes(2 * N - 1, N);    }} // This code is contributed by PrinciRaj1992

## Javascript

 

Output:

Calculated Answer is 15 and is Equal to Actual Answer
Calculated Answer is 17 and is Equal to Actual Answer

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with industry experts, please refer DSA Live Classes

My Personal Notes arrow_drop_up