I am currently checking about coding an algorithms. If we have the following case:
Given a sorted (increasing order) array with unique integer elements, wrote an algorithm to create a binary search tree with minimal height.
The following code is proposed as the solution:
TreeNode createMinimalBST(int arr[], int start, int end){
if (end < start) {
return null;
}
int mid = (start + end) / 2;
TreeNode n = new TreeNode(arr[mid]);
n.setLeftChild(createMinimalBST(arr, start, mid - 1));
n.setRightChild(createMinimalBST(arr, mid + 1, end));
return n;
}
TreeNode createMinimalBST(int array[]) {
return createMinimalBST(array, 0, array.length - 1);
}
But if I try this code with the following array input:
[2,4,6,8,10,20]
And I perform the first iteration
createMinimalBST([2,4,6,8,10,20], 0, 5);
The following line:
int mid = (start + end) / 2; // in Java (0 + 5) / 2 = 2;
would calculate the mid as the root of the binary search tree the position number 2 which is the value 6.
However, the binary search tree in this example should look like:
8
/ \
4 10
/ \ \
2 6 20
The code is coming from a reputable source, but my gut feeling is that the implementation is incorrect.
Am I missing something or the implementation is not right ?
array.length - 1
– Presumemid
. Ifend-start+1
is odd, themid = (start+end)/2
, otherwisemid = (start + end)/2 + 1
. Moreover, can you please share the link of the source ? – Sputum