using
System;
using
System.Collections.Generic;
class
GFG {
class
Node {
public
int
data;
public
Node left, right;
public
Node(
int
x)
{
data = x;
left = right =
null
;
}
}
static
void
allTraversal(Node root)
{
List<
int
> pre =
new
List<
int
>();
List<
int
> In =
new
List<
int
>();
List<
int
> post =
new
List<
int
>();
Stack<Tuple<Node,
int
>> s =
new
Stack<Tuple<Node,
int
>>();
s.Push(
new
Tuple<Node,
int
>(root, 1));
while
(s.Count > 0)
{
Tuple<Node,
int
> p = s.Peek();
if
(p.Item2 == 1)
{
Tuple<Node,
int
> temp = s.Peek();
temp =
new
Tuple<Node,
int
>(temp.Item1, temp.Item2 + 1);
s.Pop();
s.Push(temp);
pre.Add(p.Item1.data);
if
(p.Item1.left !=
null
)
{
s.Push(
new
Tuple<Node,
int
>(p.Item1.left, 1));
}
}
else
if
(p.Item2 == 2) {
Tuple<Node,
int
> temp = s.Peek();
temp =
new
Tuple<Node,
int
>(temp.Item1, temp.Item2 + 1);
s.Pop();
s.Push(temp);
In.Add(p.Item1.data);
if
(p.Item1.right !=
null
) {
s.Push(
new
Tuple<Node,
int
>(p.Item1.right, 1));
}
}
else
{
post.Add(p.Item1.data);
s.Pop();
}
}
Console.Write(
"Preorder Traversal: "
);
foreach
(
int
i
in
pre) {
Console.Write(i +
" "
);
}
Console.WriteLine();
Console.Write(
"Inorder Traversal: "
);
foreach
(
int
i
in
In) {
Console.Write(i +
" "
);
}
Console.WriteLine();
Console.Write(
"Postorder Traversal: "
);
foreach
(
int
i
in
post) {
Console.Write(i +
" "
);
}
Console.WriteLine();
}
static
void
Main() {
Node root =
new
Node(1);
root.left =
new
Node(2);
root.right =
new
Node(3);
root.left.left =
new
Node(4);
root.left.right =
new
Node(5);
root.right.left =
new
Node(6);
root.right.right =
new
Node(7);
allTraversal(root);
}
}