树之旅 已经讨论了将树的层次结构展平为数组的方法,该数组包含 2*N-1 价值观在本文中,我们的任务是证明欧拉游程树的阶数是节点数减1的2倍。这里的度数是指在Euler Tour中遍历的节点总数。 例如:
null
输入:
![]()
产出:15 输入:
![]()
产出:17
说明: 使用 例1 :
哪里
可以看出,Euler Tour中每个节点的计数正好等于节点的出度加1。 从数学上讲,它可以表示为:
![]()
哪里 全部的 表示Euler巡更树中的节点总数
表示给定树中的第i个节点 N表示给定树中的节点总数
表示的子对象数
![]()
C++
// 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) { 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" ; else cout << "Calculated Answer is Incorrect" ; } 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<Integer>[] 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" ); else System.out.print( "Calculated Answer is Incorrect" ); } // Driver Code public static void main(String[] args) { for ( int i = 0 ; i < MAX; i++) adj[i] = new Vector<Integer>(); // 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" ); else Console.Write( "Calculated Answer " + "is Incorrect" ); } // 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
<script> // Javascript program to check the number // of nodes in Euler Tour tree. var MAX = 1001; // Adjacency list representation of tree var adj = Array.from(Array(MAX), ()=>Array()); // Function to add edges to tree function add_edge(u, v) { adj[u].push(v); } // Program to check if calculated Value is // equal to 2*size-1 function checkTotalNumberofNodes(actualAnswer, size) { var calculatedAnswer = size; // push out-degree of each node for ( var i = 1; i <= size; i++) calculatedAnswer += adj[i].length; if (actualAnswer == calculatedAnswer) document.write( "Calculated Answer is " + calculatedAnswer + " and is Equal to Actual Answer<br>" ); else document.write( "Calculated Answer " + "is Incorrect<br>" ); } // Driver Code for ( var i = 0; i < MAX; i++) adj[i] = []; // Constructing 1st tree from example var 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 ( var i = 1; i <= N; i++) adj[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].Count checkTotalNumberofNodes(2 * N - 1, N); // This code is contributed by itsok. </script> |
输出:
Calculated Answer is 15 and is Equal to Actual AnswerCalculated Answer is 17 and is Equal to Actual Answer
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END