using
System;
using
System.Collections.Generic;
class
Node
{
public
int
data;
public
Node left, right;
public
Node(
int
data)
{
this
.data = data;
left =
null
;
right =
null
;
}
}
public
class
GFG
{
static
Node newNode(
int
data)
{
Node temp =
new
Node(data);
temp.data = data;
temp.left = temp.right =
null
;
return
temp;
}
static
void
printArr(
int
[] arr,
int
n)
{
for
(
int
i = 0; i < n; i++)
Console.Write(arr[i] +
" "
);
}
static
int
getHeight(Node root)
{
if
(root.left ==
null
&& root.right ==
null
)
return
0;
int
left = 0;
if
(root.left !=
null
)
left = getHeight(root.left);
int
right = 0;
if
(root.right !=
null
)
right = getHeight(root.right);
return
(Math.Max(left, right) + 1);
}
static
void
calculateLevelSum_Using_BFS(Node root,
int
[] sum)
{
Queue<Node> queue =
new
Queue<Node>();
int
currentLevel = 0;
queue.Enqueue(root);
while
(queue.Count > 0)
{
int
no_of_nodes_current_Level = queue.Count;
int
current_LevelSum = 0;
for
(
int
i = 0; i < no_of_nodes_current_Level; i++)
{
Node remove = queue.Dequeue();
current_LevelSum += remove.data;
if
(remove.left !=
null
)
{
queue.Enqueue(remove.left);
}
if
(remove.right !=
null
)
{
queue.Enqueue(remove.right);
}
}
sum[currentLevel] = current_LevelSum;
currentLevel++;
}
}
public
static
void
Main(
string
[] args)
{
Node root = newNode(6);
root.left = newNode(4);
root.right = newNode(8);
root.left.left = newNode(3);
root.left.right = newNode(5);
root.right.left = newNode(7);
root.right.right = newNode(9);
int
levels = getHeight(root) + 1;
int
[] sum =
new
int
[levels];
calculateLevelSum_Using_BFS(root, sum);
printArr(sum, levels);
}
}