Используйте рекурсию.Каждая ветвь генерирует новую ветвь, выберите средний элемент в несортированном наборе, медиана.Поместите его в текущий элемент дерева.Скопируйте все элементы, меньшие, чем медиана, в другой массив, отправьте этот новый массив на вызов того же метода.Скопируйте все элементы, превышающие медиану, в другой массив, отправьте этот новый массив на вызов того же метода. \
Сбалансированные деревья должны иметь нечетное количество элементов, если основной родительский узел не заполненВы должны решить, есть ли два значения, которые являются Медианой, принадлежит ли дубликат на нижней ветви или верхней ветви.В моем примере я поместил дубликаты на верхнюю ветвь.
Медиана будет числом, в котором равное количество чисел меньше и больше числа.1,2,3,3,4,18,29,105,123 В этом случае медиана равна 4, хотя среднее (или среднее) намного выше.
Я не включил код, определяющий медиану.
BuildTreeItem(TreeItem Item, Array Set)
{
Array Smalls;
Array Larges;
Median = DetermineMedian(Set);
Item.Value = Median;
if(Set.Count() == 1)
return;
for (int i = 0; int i < Set.Count(); i++)
{
if(Set[i] < Median)
{
Smalls.new(Set[i]);
}
else
{
Larges.new(Set[i]);
}
}
Item.Lower = new TreeItem;
Item.Upper = new TreeItem;
BuildTreeItem(TreeItem.Lower, Smalls);
BuildTreeItem(TreeItem.Upper, Larges);
}