递归最小树创建函数有问题吗?

来自 Cracking the Coding Interview 中的练习:给定一个具有唯一整数元素的排序(递增顺序)数组,编写一个算法,该算法将创建一个高度最小的二叉搜索树。

算法结构为:

  1. 将数组的中间元素(是根)插入树中。

  2. 插入(到左子树)左子数组元素。

  3. 插入(到右子树)右子数组元素。

  4. 递归。

但我认为实际的代码有问题。给定一个包含 {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;

}


千巷猫影
浏览 138回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java