using
System;
using
System.Collections.Generic;
public
class
TreeNode
{
public
int
val;
public
TreeNode left, right;
public
TreeNode(
int
key)
{
val = key;
left =
null
;
right =
null
;
}
}
public
class
GFG{
static
TreeNode replaceLvl(TreeNode root){
if
(root==
null
)
return
root;
Queue<TreeNode> que1=
new
Queue<TreeNode>();
Queue<TreeNode> que2=
new
Queue<TreeNode>();
que1.Enqueue(root);
que2.Enqueue(root);
while
(
true
)
{
int
lenque1 = que1.Count;
int
lenque2 = que2.Count;
int
lvlsum = 0;
if
(lenque1 == 0)
break
;
while
(lenque1 > 0)
{
TreeNode temp = que1.Dequeue();
lvlsum += temp.val;
if
(temp.left!=
null
)
que1.Enqueue(temp.left);
if
(temp.right!=
null
)
que1.Enqueue(temp.right);
lenque1 -= 1;
}
while
(lenque2 > 0)
{
TreeNode temp = que2.Dequeue();
temp.val = lvlsum;
if
(temp.left!=
null
)
que2.Enqueue(temp.left);
if
(temp.right!=
null
)
que2.Enqueue(temp.right);
lenque2 -= 1;
}
}
return
root;
}
static
void
printLvl(TreeNode root)
{
Queue<TreeNode> que =
new
Queue<TreeNode>();
que.Enqueue(root);
while
(
true
)
{
int
length = que.Count;
if
(length == 0)
break
;
while
(length>0)
{
TreeNode temp = que.Dequeue();
Console.Write(temp.val+
" "
);
if
(temp.left !=
null
)
que.Enqueue(temp.left);
if
(temp.right !=
null
)
que.Enqueue(temp.right);
length -= 1;
}
Console.WriteLine();
}
}
static
public
void
Main (){
TreeNode root =
new
TreeNode(4);
root.left =
new
TreeNode(5);
root.left.left =
new
TreeNode(1);
root.left.right =
new
TreeNode(3);
root.right =
new
TreeNode(7);
root.right.right =
new
TreeNode(5);
root = replaceLvl(root);
printLvl(root);
}
}