我试图找到数组的中间元素或索引,然后得到每一半的中间部分,依此类推......
所以我们说[0,1,2,3,4,5,6,7,8,9,10,11,12,13]
我期待的是7, 3, 1, 0, 2, 5, 4, 6 ...
这样当我从新数组中添加元素时,我最终得到了一个平衡的BST
代码:
public static BST fillBST(BST b, List<Integer> nums, int start, int end) {
int mid = (start + end) / 2;
if (start > end)
b.insertt(nums.get(mid));
else {
fillBST(b, nums, start, mid - 1);
fillBST(b, nums, mid + 1, end);
}
return b;
}
输出我使用列表[0,31]: 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31
答案 0 :(得分:0)
你的递归写得不正确,问题是什么。您应该始终添加mid元素,然后在需要时移动到左右部分。
让我们这样做:
/etc/logrotate.conf
这打印 [7,3,1,0,2,5,4,6,11,9,8,10,13,12]
除了递归条件,你可以看到我计算mid的不同方式。通过计算public static void main(String[] args) {
List<Integer> list = Arrays.asList(new Integer[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 });
List<Integer> res =new ArrayList<>();
fillBST(res, list, 0, list.size() - 1);
System.out.println(res);
}
public static List<Integer> fillBST(List<Integer> b, List<Integer> nums, int start, int end) {
int mid = (int)Math.round((1.0 * start + end) / 2);
b.add(nums.get(mid));
if (start <= mid - 1)
fillBST(b, nums, start, mid - 1);
if (end >= mid + 1)
fillBST(b, nums, mid + 1, end);
return b;
}
,您不会对值进行舍入,而是将其截断。因此,在您的情况下,medium元素将变为6而不是7。