我无法弄清楚为什么我的递归调用很糟糕。有人可以说清楚我做错了什么以及如何纠正这个问题?我感谢任何帮助。
我有一个填充了随机整数的数组,试图建立一个完全左倾的二叉树。
主:
public static void main(String[] args) {
//Declare New Array to Store Integer Values
int[] array1 = new int[26];
randArray(array1, 1, 50);
for(int x=0; x < array1.length; x++)
System.out.print(array1[x] + " ");
//Build Skewed Tree
BinaryTree tree1 = new BinaryTree(array1[0]);
for(int x=1; x < array1.length; x++)
tree1.addLeft(new BinaryTree(array1[x]));
tree1.print();
}
public static void randArray(int[] list, int low, int up) {
Random rand = new Random();
for (int i = 0; i < list.length; i++) {
list[i] = rand.nextInt(up - low + 1) + low;
}
}
}
addLeft:
public void addLeft(BinaryTree subtree){
if(leftChild != null){
addLeft(leftChild);
}
leftChild = subtree;
}
答案 0 :(得分:2)
您的addLeft函数最有可能如下所示:
public void addLeft(BinaryTree subtree){
if(leftChild != null){
leftChild.addLeft(subtree);
}
leftChild = subtree;
}
注意:这实际上并没有对任何东西进行排序。如果你想要一个排序的左倾斜二叉树,该函数应该看起来像这样:
public void addLeft(BinaryTree subtree){
if (subtree.value < value)
{
int tmp = value;
value = subtree.value;
subtree.value = tmp;
}
if(leftChild != null){
leftChild.addLeft(subtree);
}
leftChild = subtree;
}
由于您实现此树的方式,我通过交换值来完成此操作。如果这是一个左右两侧真正的二叉树,你可以直接向左右方向转储节点,然后对它们进行排序。