using
System;
using
System.Collections.Generic;
public
class
Node{
public
int
data;
public
Node left, right;
public
Node(
int
item){
data = item;
left =
null
;
right =
null
;
}
}
public
class
BinaryTree{
Node root;
List<Tuple<Node,
int
>> traversal =
new
List<Tuple<Node,
int
>>();
void
levelOrderTraversal(){
Node curr = root;
int
level = 0;
while
(curr !=
null
){
if
(curr.left ==
null
){
traversal.Add(
new
Tuple<Node,
int
>(curr, level));
curr = curr.right;
if
(curr !=
null
){
level += 1;
}
else
{
level -= 1;
}
}
else
{
Node prev = curr.left;
int
toUp = 0;
while
(prev.right !=
null
&& prev.right != curr){
prev = prev.right;
toUp += 1;
}
if
(prev.right == curr){
prev.right =
null
;
curr = curr.right;
level -= toUp + 1;
}
else
{
traversal.Add(
new
Tuple<Node,
int
>(curr, level));
prev.right = curr;
curr = curr.left;
level += 1;
}
}
}
}
public
static
void
Main(){
BinaryTree tree =
new
BinaryTree();
tree.root =
new
Node(5);
tree.root.left =
new
Node(2);
tree.root.right =
new
Node(3);
tree.root.left.right =
new
Node(6);
tree.levelOrderTraversal();
int
h = 0;
foreach
(
var
i
in
tree.traversal){
h = Math.Max(h, i.Item2 + 1);
}
for
(
int
i = 0; i<h; i++){
foreach
(
var
j
in
tree.traversal){
if
(j.Item2 == i){
Console.Write(j.Item1.data +
" "
);
}
}
Console.WriteLine(
" "
);
}
}
}