using
System;
using
System.Collections.Generic;
class
GFG{
class
node
{
public
int
data;
public
node left =
null
;
public
node right =
null
;
}
static
node newNode(
int
ch)
{
node n =
new
node();
n.data = ch;
n.left =
null
;
n.right =
null
;
return
n;
}
static
int
Height(node root)
{
if
(root ==
null
)
return
0;
return
1 + Math.Max(Height(root.left),
Height(root.right));
}
static
void
printSpecificLevelOrder(Queue<node> A,
Queue<node> B,
int
height)
{
while
(height != 0)
{
node X = A.Peek();
A.Dequeue();
node Y = B.Peek();
B.Dequeue();
if
(X ==
null
)
{
A.Enqueue(
null
);
A.Enqueue(
null
);
}
else
{
Console.Write(X.data +
" "
);
A.Enqueue(X.left);
A.Enqueue(X.right);
}
if
(Y ==
null
)
{
B.Enqueue(
null
);
B.Enqueue(
null
);
}
else
{
Console.Write(Y.data +
" "
);
B.Enqueue(Y.right);
B.Enqueue(Y.left);
}
height -= 1;
}
}
public
static
void
Main()
{
node root = newNode(1);
root.left = newNode(2);
root.right = newNode(3);
root.left.left = newNode(4);
root.left.right = newNode(5);
root.right.right = newNode(7);
root.left.left.left = newNode(8);
root.left.left.right = newNode(9);
root.left.right.left = newNode(10);
root.left.right.right = newNode(11);
root.right.right.left = newNode(14);
root.right.right.right = newNode(15);
root.left.left.left.left = newNode(16);
root.left.left.left.right = newNode(17);
root.left.left.right.left = newNode(18);
root.left.left.right.right = newNode(19);
root.left.right.left.left = newNode(20);
root.left.right.left.right = newNode(21);
root.left.right.right.left = newNode(22);
root.left.right.right.right = newNode(23);
root.right.right.left.left = newNode(28);
root.right.right.left.right = newNode(29);
root.right.right.right.left = newNode(30);
root.right.right.right.right = newNode(31);
Queue<node> A =
new
Queue<node>();
Queue<node> B =
new
Queue<node>();
int
height = 0;
if
(root !=
null
)
{
Console.Write(root.data +
" "
);
A.Enqueue(root.left);
B.Enqueue(root.right);
height = Height(root);
height = (
int
)Math.Pow(2, (height - 1)) - 1;
}
printSpecificLevelOrder(A, B, height);
}
}