【发布时间】:2019-02-01 08:24:48
【问题描述】:
来自破解编码面试的练习: 给定一个具有唯一整数元素的排序(递增顺序)数组,编写一个算法来创建一个高度最小的二叉搜索树。
算法结构为:
将数组的中间元素(为根)插入到树中。
插入(到左子树)左子数组元素。
插入(到右子树)右子数组元素。
递归。
但我认为实际代码有问题。给定一个包含 {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;
}
【问题讨论】:
-
7 将插入到 6 的右侧
-
你的问题是什么?
标签: java recursion binary-search-tree