0
我需要使用数组来实现具有特定公式的二进制搜索树:root是tree [0]。对于tree [n]处的任何节点,将在树[2n + 1](左分支)和树[2n + 2](右分支)处找到n的子节点(如果有的话)。我被允许创建第二个数组来存储BST。我给一个伪代码:如何使用具有此特定公式的未排序数组实现二叉搜索树?
for(i=1;i<;i++) {
//Every iteration we start from the root node
while (the cell is not empty){
if(less than the element)
go to 2i+1;
else if (greater than the element)
go to 2i+2;
到目前为止,这是我头脑风暴:
public class BinarySearchTree {
public void createBST(int[] array) {
int[] tree = new int[array.length];
int root = array[0];
for (int i = 0; i < array.length; i++) {
if (array[i] < root) {
tree[(2*i)+1] = array[i];
} else {
array[(2 * i) + 2];
}
}
}
}
我不知道在哪里可以从这里走。我一直在这一段时间没有解决方案。任何帮助表示赞赏。谢谢。
非常感谢!我运行了代码,并且有一个ArrayIndexOutOfBoundException。我试着改变array.length并添加一个额外的if语句,当pos> array.length但没有结果。我认为这可能是while循环语句。你有什么想法如何解决这个问题? – Jen
潜在的问题是,通过跟随伪代码添加序列'1; 2; 3; 4'将被存储在位置'0; 2; 6; 14'中,但是该阵列只有4个长。愚蠢的解决方案是让阵列足够大。其他解决方案:某种平衡,或_sorting_'array'成为一个二叉搜索树(效率不高,但保证工作)。我忘了问的是:数组排序? – Poohl
我只是调试我的程序,看看你在说什么。不,数组没有排序。我的教授说他不希望数组被排序。对不起,我忘了提及一些事情:如果节点没有左边和/或右边的孩子,相应的位置应该是-1。我需要做更大的阵列吗? – Jen