# Total nodes traversed in Euler Tour Tree

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 tree  vector<int> adj[MAX];     // Function to add edges to tree  void add_edge(int u, int v)  {      adj[u].push_back(v);  }     // Program to check if calculated Value is   // equal to 2*size-1  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)          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

Output:

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


My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.

Improved By : Rajput-Ji, princiraj1992