试图构建完全左倾的二叉树 - 获得堆栈溢出错误

时间:2014-10-27 23:54:20

标签: java binary-tree stack-overflow

我无法弄清楚为什么我的递归调用很糟糕。有人可以说清楚我做错了什么以及如何纠正这个问题?我感谢任何帮助。

我有一个填充了随机整数的数组,试图建立一个完全左倾的二叉树。

主:

    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;
    }

1 个答案:

答案 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;
}

由于您实现此树的方式,我通过交换值来完成此操作。如果这是一个左右两侧真正的二叉树,你可以直接向左右方向转储节点,然后对它们进行排序。