using
System;
using
System.Collections.Generic;
class
Node {
public
int
val;
public
Node left;
public
Node right;
public
Node(
int
val)
{
this
.val = val;
left =
null
;
right =
null
;
}
}
class
Program {
static
Node SortedArrayToBST(List<
int
> nums)
{
if
(nums.Count == 0) {
return
null
;
}
int
n = nums.Count;
int
mid = n / 2;
Node root =
new
Node(nums[mid]);
Queue<Tuple<Node, Tuple<
int
,
int
> > > q
=
new
Queue<Tuple<Node, Tuple<
int
,
int
> > >();
q.Enqueue(
new
Tuple<Node, Tuple<
int
,
int
> >(
root,
new
Tuple<
int
,
int
>(0, mid - 1)));
q.Enqueue(
new
Tuple<Node, Tuple<
int
,
int
> >(
root,
new
Tuple<
int
,
int
>(mid + 1, n - 1)));
while
(q.Count != 0) {
Tuple<Node, Tuple<
int
,
int
> > curr
= q.Dequeue();
Node parent = curr.Item1;
int
left = curr.Item2.Item1;
int
right = curr.Item2.Item2;
if
(left <= right && parent !=
null
) {
int
Mid = (left + right) / 2;
Node child =
new
Node(nums[Mid]);
if
(nums[Mid] < parent.val) {
parent.left = child;
}
else
{
parent.right = child;
}
q.Enqueue(
new
Tuple<Node, Tuple<
int
,
int
> >(
child,
new
Tuple<
int
,
int
>(left, Mid - 1)));
q.Enqueue(
new
Tuple<Node, Tuple<
int
,
int
> >(
child,
new
Tuple<
int
,
int
>(Mid + 1, right)));
}
}
return
root;
}
static
void
PrintBST(Node root)
{
if
(root ==
null
)
return
;
Console.Write(root.val +
" "
);
PrintBST(root.left);
PrintBST(root.right);
}
static
void
Main(
string
[] args)
{
List<
int
> nums
=
new
List<
int
>{ 1, 2, 3, 4, 5, 6, 7 };
Node root = SortedArrayToBST(nums);
PrintBST(root);
}
}