给定一个N元树,任务是打印具有最大数量节点的关卡。
例子:
Input : For example, consider the following tree
1 - Level 1
/ \
2 3 - Level 2
/ \ \
4 5 6 - Level 3
/ \ /
7 8 9 - Level 4
Output : Level-3 and Level-4
方法:
- 将所有连接节点插入二维矢量树。
- 在树上运行DFS,以使height [node] = 1 + height [parent]
- 一旦完成DFS遍历,对于每个节点的级别,将count []数组增加1。
- 从第一个级别迭代到最后一个级别,并找到具有最大节点数的级别。
- 从第一级到最后一级重新遍历,并打印具有相同最大节点数的所有级别。
下面是上述方法的实现。
C++
// C++ program to print the level
// with maximum number of nodes
#include
using namespace std;
// Function for DFS in a tree
void dfs(int node, int parent, int height[], int vis[],
vector tree[])
{
// calculate the level of every node
height[node] = 1 + height[parent];
// mark every node as visited
vis[node] = 1;
// iterate in the subtree
for (auto it : tree[node]) {
// if the node is not visited
if (!vis[it]) {
// call the dfs function
dfs(it, node, height, vis, tree);
}
}
}
// Function to insert edges
void insertEdges(int x, int y, vector tree[])
{
tree[x].push_back(y);
tree[y].push_back(x);
}
// Function to print all levels
void printLevelswithMaximumNodes(int N, int vis[], int height[])
{
int mark[N + 1];
memset(mark, 0, sizeof mark);
int maxLevel = 0;
for (int i = 1; i <= N; i++) {
// count number of nodes
// in every level
if (vis[i])
mark[height[i]]++;
// find the maximum height of tree
maxLevel = max(height[i], maxLevel);
}
int maxi = 0;
for (int i = 1; i <= maxLevel; i++) {
maxi = max(mark[i], maxi);
}
// print even number of nodes
cout << "The levels with maximum number of nodes are: ";
for (int i = 1; i <= maxLevel; i++) {
if (mark[i] == maxi)
cout << i << " ";
}
}
// Driver Code
int main()
{
// Construct the tree
/* 1
/ \
2 3
/ \ \
4 5 6
/ \ /
7 8 9 */
const int N = 9;
vector tree[N + 1];
insertEdges(1, 2, tree);
insertEdges(1, 3, tree);
insertEdges(2, 4, tree);
insertEdges(2, 5, tree);
insertEdges(5, 7, tree);
insertEdges(5, 8, tree);
insertEdges(3, 6, tree);
insertEdges(6, 9, tree);
int height[N + 1];
int vis[N + 1] = { 0 };
height[0] = 0;
// call the dfs function
dfs(1, 0, height, vis, tree);
// Function to print
printLevelswithMaximumNodes(N, vis, height);
return 0;
}
Java
// Java program to print the level
// with maximum number of nodes
import java.util.*;
class GFG
{
static int N = 9;
// Function for DFS in a tree
static void dfs(int node, int parent, int height[], int vis[],
Vector tree[])
{
// calculate the level of every node
height[node] = 1 + height[parent];
// mark every node as visited
vis[node] = 1;
// iterate in the subtree
for (int it : tree[node])
{
// if the node is not visited
if (vis[it] != 1)
{
// call the dfs function
dfs(it, node, height, vis, tree);
}
}
}
// Function to insert edges
static void insertEdges(int x, int y, Vector tree[])
{
tree[x].add(y);
tree[y].add(x);
}
// Function to print all levels
static void printLevelswithMaximumNodes(int N, int vis[], int height[])
{
int []mark = new int[N + 1];
int maxLevel = 0;
for (int i = 1; i <= N; i++) {
// count number of nodes
// in every level
if (vis[i] == 1)
mark[height[i]]++;
// find the maximum height of tree
maxLevel = Math.max(height[i], maxLevel);
}
int maxi = 0;
for (int i = 1; i <= maxLevel; i++)
{
maxi = Math.max(mark[i], maxi);
}
// print even number of nodes
System.out.print("The levels with maximum number of nodes are: ");
for (int i = 1; i <= maxLevel; i++)
{
if (mark[i] == maxi)
System.out.print(i+ " ");
}
}
// Driver Code
public static void main(String[] args)
{
// Conthe tree
/* 1
/ \
2 3
/ \ \
4 5 6
/ \ /
7 8 9 */
Vector []tree = new Vector[N + 1];
for(int i= 0; i < N + 1; i++)
tree[i] = new Vector();
insertEdges(1, 2, tree);
insertEdges(1, 3, tree);
insertEdges(2, 4, tree);
insertEdges(2, 5, tree);
insertEdges(5, 7, tree);
insertEdges(5, 8, tree);
insertEdges(3, 6, tree);
insertEdges(6, 9, tree);
int height[] = new int[N + 1];
int vis[] = new int[N + 1];
height[0] = 0;
// call the dfs function
dfs(1, 0, height, vis, tree);
// Function to print
printLevelswithMaximumNodes(N, vis, height);
}
}
// This code is contributed by 29AjayKumar
Python3
# Python3 program to print the level
# with the maximum number of nodes
# Function for DFS in a tree
def dfs(node, parent, height, vis, tree):
# calculate the level of every node
height[node] = 1 + height[parent]
# mark every node as visited
vis[node] = 1
# iterate in the subtree
for it in tree[node]:
# if the node is not visited
if vis[it] == 0:
# call the dfs function
dfs(it, node, height, vis, tree)
# Function to insert edges
def insertEdges(x, y, tree):
tree[x].append(y)
tree[y].append(x)
# Function to print all levels
def printLevelswithMaximumNodes(N, vis, height):
mark = [0] * (N + 1)
maxLevel = 0
for i in range (1, N + 1):
# count number of nodes
# in every level
if vis[i] == 1:
mark[height[i]] += 1
# find the maximum height of tree
maxLevel = max(height[i], maxLevel)
maxi = 0
for i in range(1, maxLevel + 1):
maxi = max(mark[i], maxi)
# print even number of nodes
print("The levels with maximum number",
"of nodes are:", end = " ")
for i in range(1, maxLevel + 1):
if mark[i] == maxi:
print(i, end = " ")
# Driver Code
if __name__ == "__main__":
# Construct the tree
N = 9
# Create an empty 2-D list
tree = [[] for i in range(N + 1)]
insertEdges(1, 2, tree)
insertEdges(1, 3, tree)
insertEdges(2, 4, tree)
insertEdges(2, 5, tree)
insertEdges(5, 7, tree)
insertEdges(5, 8, tree)
insertEdges(3, 6, tree)
insertEdges(6, 9, tree)
height = [None] * (N + 1)
vis = [0] * (N + 1)
height[0] = 0
# call the dfs function
dfs(1, 0, height, vis, tree)
# Function to print
printLevelswithMaximumNodes(N, vis, height)
# This code is contributed
# by Rituraj Jain
C#
// C# program to print the level
// with maximum number of nodes
using System;
using System.Collections.Generic;
public class GFG
{
static int N = 9;
// Function for DFS in a tree
static void dfs(int node, int parent, int []height, int []vis,
List []tree)
{
// calculate the level of every node
height[node] = 1 + height[parent];
// mark every node as visited
vis[node] = 1;
// iterate in the subtree
foreach (int it in tree[node])
{
// if the node is not visited
if (vis[it] != 1)
{
// call the dfs function
dfs(it, node, height, vis, tree);
}
}
}
// Function to insert edges
static void insertEdges(int x, int y, List []tree)
{
tree[x].Add(y);
tree[y].Add(x);
}
// Function to print all levels
static void printLevelswithMaximumNodes(int N, int []vis, int []height)
{
int []mark = new int[N + 1];
int maxLevel = 0;
for (int i = 1; i <= N; i++) {
// count number of nodes
// in every level
if (vis[i] == 1)
mark[height[i]]++;
// find the maximum height of tree
maxLevel = Math.Max(height[i], maxLevel);
}
int maxi = 0;
for (int i = 1; i <= maxLevel; i++)
{
maxi = Math.Max(mark[i], maxi);
}
// print even number of nodes
Console.Write("The levels with maximum number of nodes are: ");
for (int i = 1; i <= maxLevel; i++)
{
if (mark[i] == maxi)
Console.Write(i+ " ");
}
}
// Driver Code
public static void Main(String[] args)
{
// Conthe tree
/* 1
/ \
2 3
/ \ \
4 5 6
/ \ /
7 8 9 */
List []tree = new List[N + 1];
for(int i= 0; i < N + 1; i++)
tree[i] = new List();
insertEdges(1, 2, tree);
insertEdges(1, 3, tree);
insertEdges(2, 4, tree);
insertEdges(2, 5, tree);
insertEdges(5, 7, tree);
insertEdges(5, 8, tree);
insertEdges(3, 6, tree);
insertEdges(6, 9, tree);
int []height = new int[N + 1];
int []vis = new int[N + 1];
height[0] = 0;
// call the dfs function
dfs(1, 0, height, vis, tree);
// Function to print
printLevelswithMaximumNodes(N, vis, height);
}
}
// This code contributed by Rajput-Ji
输出:
The levels with maximum number of nodes are: 3 4
时间复杂度:O(N)
辅助空间:O(N)
如果您希望与行业专家一起参加现场课程,请参阅《 Geeks现场课程》和《 Geeks现场课程美国》。