using
System;
using
System.Collections.Generic;
public
class
TreeNode {
public
int
val;
public
TreeNode left;
public
TreeNode right;
public
TreeNode(
int
v)
{
val = v;
left = right =
null
;
}
}
public
class
Solution {
public
void
dfsUtil(TreeNode root,
int
level,
int
L,
int
K)
{
if
(root ==
null
) {
return
;
}
if
(level == L - 1) {
TreeNode tmp =
new
TreeNode(K);
tmp.left = root.left;
root.left = tmp;
TreeNode tmp1 =
new
TreeNode(K);
tmp1.right = root.right;
root.right = tmp1;
return
;
}
/// make the recursive calls
dfsUtil(root.left, level + 1, L, K);
dfsUtil(root.right, level + 1, L, K);
}
public
TreeNode AddOneRow(TreeNode root,
int
K,
int
L)
{
if
(L == 1) {
TreeNode t =
new
TreeNode(K);
t.left = root;
return
t;
}
dfsUtil(root, 1, L, K);
return
root;
}
public
void
LevelOrder(TreeNode root)
{
Queue<TreeNode> Q =
new
Queue<TreeNode>();
if
(root ==
null
) {
Console.WriteLine(
"Null"
);
return
;
}
Q.Enqueue(root);
while
(Q.Count > 0) {
int
len = Q.Count;
while
(len > 0) {
TreeNode temp = Q.Dequeue();
Console.Write(temp.val +
" "
);
if
(temp.left !=
null
) {
Q.Enqueue(temp.left);
}
if
(temp.right !=
null
) {
Q.Enqueue(temp.right);
}
len--;
}
Console.WriteLine();
}
}
public
static
void
Main()
{
TreeNode root =
new
TreeNode(1);
root.left =
new
TreeNode(2);
root.left.left =
new
TreeNode(4);
root.left.right =
new
TreeNode(5);
root.right =
new
TreeNode(3);
root.right.right =
new
TreeNode(6);
int
L = 2;
int
K = 1;
Solution s =
new
Solution();
s.LevelOrder(s.AddOneRow(root, K, L));
}
}