Начиная с Cracking the Coding Interview, этот код создает двоичное дерево поиска с минимальной высотой (сбалансированной) с учетом отсортированного (в порядке возрастания) массива.
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;
}
Я полностью следую этому коду, но сам не смог придумать это решение.
В частности, после записи значений переменных в пример ввода, хитрость, как представляется, заключается в том, что начало должно быть <= конец. Это гарантирует, что мы вставим значения массива в правильное место, а также завершающие нулевые указатели. Но я действительно поражен тем, как кому-то удалось это выяснить и использовать для написания этой рекурсивной функции. Кто-нибудь может дать представление о том, как они пойдут о получении этого решения? </p>