Из упражнения в «Взлом собеседования при кодировании»: учитывая отсортированный (в порядке возрастания) массив с уникальными целочисленными элементами, напишите алгоритм, который создаст двоичное дерево поиска с минимальной высотой.
Структура алгоритма:
Вставить в дерево средний элемент массива (является корнем).
Вставить (в левое поддерево) левые элементы подмассива.
Вставьте (в правое поддерево) правые элементы подмассива.
Рекурс.
НоФактический код, я считаю, глючит.Учитывая массив, который содержит {6, 7, 8, 9, 10}, он вставит 6 дважды в левое поддерево.Это из-за int mid = (начало + конец) / 2;Код никогда не вставит узел 7 в левое дерево поддерева, потому что он находится в индексе 1, а средняя переменная не будет иметь значение 1.
Node createMinimalBST(int arr[]) {
return createMinimalBST(array, 0, array.length - 1);
}
Node createMinimalBST(int arr[], int start, int end) {
if (end < start) {
return null;
}
int mid = (start + end) / 2;
Node n = new Node(arr[mid]);
n.left = createMinimalBST(arr, start, mid - 1);
n.right = createMinimalBST(arr, mid + 1, end);
return n;
}