using
System;
using
System.Collections.Generic;
class
Node {
public
int
data;
public
Node left;
public
Node right;
public
Node(
int
data)
{
this
.data = data;
left =
null
;
right =
null
;
}
}
class
BST {
public
Node constructBst(
int
[] arr,
int
n)
{
var
queue
=
new
Queue<Tuple<Node, Tuple<
int
,
int
> > >();
if
(n == 0)
return
null
;
var
root =
new
Node(arr[0]);
var
head = root;
queue.Enqueue(
Tuple.Create(root, Tuple.Create(
int
.MinValue,
int
.MaxValue)));
int
i = 1;
while
(i < n) {
var
temp = queue.Dequeue();
var
tempRange = temp.Item2;
if
(arr[i] < temp.Item1.data
&& tempRange.Item1 < arr[i]
&& arr[i] < tempRange.Item2) {
temp.Item1.left =
new
Node(arr[i]);
queue.Enqueue(Tuple.Create(
temp.Item1.left,
Tuple.Create(tempRange.Item1,
temp.Item1.data)));
i++;
}
if
(arr[i] > temp.Item1.data
&& tempRange.Item1 < arr[i]
&& arr[i] < tempRange.Item2) {
temp.Item1.right =
new
Node(arr[i]);
queue.Enqueue(Tuple.Create(
temp.Item1.right,
Tuple.Create(temp.Item1.data,
tempRange.Item2)));
i++;
}
}
return
head;
}
public
void
inorderTraversal(Node root)
{
if
(root ==
null
)
return
;
inorderTraversal(root.left);
Console.Write(root.data +
" "
);
inorderTraversal(root.right);
}
public
static
void
Main(
string
[] args)
{
var
arr =
new
int
[] { 7, 4, 12, 3, 6, 8, 1, 5, 10 };
int
n = arr.Length;
var
bst =
new
BST();
var
root = bst.constructBst(arr, n);
Console.WriteLine(
"Inorder Traversal:"
);
bst.inorderTraversal(root);
}
}