using
System;
using
System.Collections.Generic;
public
class
Node {
public
int
data;
public
Node left, right;
public
Node(
int
item)
{
data = item;
left = right =
null
;
}
}
public
class
BinaryTree {
Node root;
public
BinaryTree() { root =
null
; }
public
void
Traverse(Node root,
int
n)
{
if
(root ==
null
)
return
;
Queue<Node> q =
new
Queue<Node>();
Stack<Node> s =
new
Stack<Node>();
bool
right2left =
false
;
int
count = 0;
q.Enqueue(root);
while
(q.Count != 0) {
int
size = q.Count;
count++;
while
(size-- > 0) {
root = q.Dequeue();
if
(right2left ==
false
)
Console.Write(root.data +
" "
);
else
s.Push(root);
if
(root.left !=
null
)
q.Enqueue(root.left);
if
(root.right !=
null
)
q.Enqueue(root.right);
}
if
(right2left ==
true
) {
while
(s.Count != 0) {
Console.Write(s.Pop().data +
" "
);
}
}
if
(count == n) {
right2left = !right2left;
count = 0;
}
Console.WriteLine();
}
}
public
static
void
Main(
string
[] args)
{
BinaryTree tree =
new
BinaryTree();
tree.root =
new
Node(1);
tree.root.left =
new
Node(2);
tree.root.right =
new
Node(3);
tree.root.left.left =
new
Node(4);
tree.root.left.right =
new
Node(5);
tree.root.right.left =
new
Node(6);
tree.root.right.right =
new
Node(7);
tree.root.left.left.left =
new
Node(8);
tree.root.left.left.right =
new
Node(9);
tree.root.left.right.left =
new
Node(10);
tree.root.right.left.right =
new
Node(11);
tree.root.right.right.left =
new
Node(12);
tree.root.left.left.right.left =
new
Node(13);
tree.root.left.left.right.right =
new
Node(14);
tree.root.right.left.right.left =
new
Node(15);
int
K = 3;
tree.Traverse(tree.root, K);
}
}