I don't fully understand the question. but this may help you...
the BST is usually coded less left, greater right (equal arbitrary). So the root is typically the median value for balance, and the next nodes are the left and right halves' medians, and so on.. its the binary search!
so if you had 1-10 as a list...
pick 5 as the root. now you have 1234 and 6789 10 as a pair of lists.
now pick the center of those... then you have 4 lists pick the center of those (begs recursion, if you see the pattern.. but since its powers of 2 you can also cook up the correct index to pull from the list each time... esp if that list were instead a vector to begin with)
if I did that right, it looks something like that, picking the rounded down side of the center element each time …
so, if you just insert using the less left/ greater right idea, and peel off from the list using this modified binary search element choosing, it will produce a balanced tree. And all you had to do is 'insert in order' to produce it on the tree side, because the work was done by sorting and picking from the list side.
Its been forever since I used a tree but from what I recall, rebuilding the tree into a new one as a one time copy is a more efficient balance than trying to balance in place. Maybe someone here knows if I am remembering that right or not. (copying pointers, not the data, of course).