TreeNode BuildTree (System.Collections.Generic.List<TreeNode> nodes, int start, int end, int subtreeHeight)
{
if (start == end)
return null;
int middle = (start + end) / 2;
var node = nodes [middle];
node.left = BuildTree (nodes, start, middle, subtreeHeight - 1);
node.right = BuildTree (nodes, middle + 1, end, subtreeHeight - 1);
if (node.left != null)
node.left.parent = node;
if (node.right != null)
node.right.parent = node;
if (subtreeHeight == 1)
node.Color = RedBlackColor.Red;
((IRedBlackTreeNode)node).UpdateAugmentedData ();
return node;
}