Sort the array, then build a balanced tree recursively based on
an array parameter. Here is pseudocode written in a C-like
language to do the tree building:
Tree
balanced_tree_from_sorted_array( Size n, signed values[n] ){
if( n == 0 ) return 0;
if( n == 1 ) return new_tree_node( values[0] );
if( n == 2 ){
Tree a = new_tree_node( values[0] );
Tree b = new_tree_node( values[1] );
a->right = b, b->parent = a;
return a;
}
Tree a = balanced_tree_from_sorted_array( n/2, values );
Tree b = new_tree_node( values[n/2] );
Tree c = balanced_tree_from_sorted_array( (n-1)/2, values + (n/2+1) );
assert( n/2 + 1 + (n-1)/2 == n );
a->parent = b, b->left = a;
c->parent = b, b->right = c;
return b;
}