来自 Cracking the Coding Interview 中的练习:给定一个具有唯一整数元素的排序(递增顺序)数组,编写一个算法,该算法将创建一个高度最小的二叉搜索树。
算法结构为:
将数组的中间元素(是根)插入树中。
插入(到左子树)左子数组元素。
插入(到右子树)右子数组元素。
递归。
但我认为实际的代码有问题。给定一个包含 {6, 7, 8, 9, 10} 的数组,它会将 6 两次插入左子树。这是因为 int mid = (start + end) / 2; 代码永远不会将节点 7 插入左子树,因为它位于索引 1 处,并且 mid 变量不会计算为 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;
}
相关分类