using
System;
using
System.Collections.Generic;
public
class
Print_Level_Sum_Btree {
public
class
Node {
public
int
data;
public
Node left;
public
Node right;
public
Node(
int
data){
this
.data = data;
left =
null
;
right =
null
;
}
}
public
class
Pair{
public
Node n;
public
int
i;
public
Pair(Node n,
int
i){
this
.n = n;
this
.i = i;
}
}
static
void
printLevelSum(Node root)
{
if
(root ==
null
)
{
Console.WriteLine(
"No nodes present"
);
return
;
}
Dictionary<
int
,
int
> map =
new
Dictionary<
int
,
int
>();
Queue<Pair> q =
new
Queue<Pair>();
q.Enqueue(
new
Pair(root, 1));
Pair p;
while
(q.Count!=0) {
p = q.Peek();
q.Dequeue();
if
(!map.ContainsKey(p.i))
map.Add(p.i, 0);
if
(p.n.left ==
null
&& p.n.right ==
null
)
{
map[p.i]= map[p.i] + p.n.data;
}
if
(p.n.left !=
null
)
q.Enqueue(
new
Pair(p.n.left, p.i + 1));
if
(p.n.right !=
null
)
q.Enqueue(
new
Pair(p.n.right, p.i + 1));
}
foreach
(KeyValuePair<
int
,
int
> entry
in
map){
int
value = (entry.Value);
Console.WriteLine(value);
}
}
public
static
void
Main(String []args)
{
Node root =
null
;
root =
new
Node(1);
root.left =
new
Node(2);
root.right =
new
Node(3);
root.left.left =
new
Node(4);
root.left.right =
new
Node(5);
root.right.left =
new
Node(6);
root.right.right =
new
Node(7);
root.left.left.right =
new
Node(8);
root.left.right.right =
new
Node(9);
root.right.right.left =
new
Node(10);
root.right.right.right =
new
Node(11);
root.left.left.right.right =
new
Node(12);
printLevelSum(root);
}
}