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.



Output: 15


Output: 17


Using Example 1:


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:
 $\displaystyle Total=\sum_{node_i=1}^{N} Out_D_e_g[node_i]+1$

 $\displaystyle Total= N + \sum_{node_i=1}^{N} Out_D_e_g[node_i]$

Total represents total number of nodes in Euler Tour Tree

 node_i represents ith node in given Tree

N represents the total number of node in given Tree

 Out_D_e_g[node_i]  represents number of child of  node_i





// C++ program to check the number of nodes
// in Euler Tour tree.
#include <bits/stdc++.h>
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)
// 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";
        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++) 
    // 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;



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 or mail your article to 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.