【发布时间】:2018-10-20 06:04:04
【问题描述】:
所以我确信这非常简单,我只是想念它,但我需要为 BST 创建一个未排序的数组。我有一个数组 int [] data = { 50, 30, 60, 10, 80, 55, 40 };并且无论我将其更改为什么,我都需要将其转换为以第一个数字为根的不平衡BST,其他数字遵循左右规则。我有这段代码适用于这个数组,但如果我将数字更改为不在中间的数字,则不会。
public Node arraytoBinary(int [] array, int start, int end) {
if (start > end){
return null;
}
int mid = (start + end) / 2;
Node node = new Node(array[mid]);
node.left = arraytoBinary(array, start, mid - 1);
node.right = arraytoBinary(array, mid + 1, end);
return node;
}
【问题讨论】:
-
您是否正在尝试制作平衡的 BST?如果是这样,这种方法需要对数组进行排序。如果不是,为什么不遍历数组并按顺序添加到树中?
-
@kingkupps 如果您将数组元素插入到 bst 中,它不必是排序数组,但数组必须排序以 执行 对数组进行二分搜索。实际上,如果它是有序的,并且您按顺序插入它们,则 bst 将转移到一个列表中。平衡数组也不需要排序数组;平衡处理我上面提到的问题。
-
“我有这个代码适用于这个数组,但如果我将数字更改为不在中间的数字,则不能。”你能用一个例子来澄清一下吗?
-
@ChiefTwoPencils 是的,但是对于要生成平衡 BST 的此代码,必须对数组进行排序。否则不能保证生成的树是平衡的。平衡数组是什么意思?
-
@ChiefTwoPencils Ahh 明白我误读了这个问题。
标签: java arrays binary-search-tree