【问题标题】:Convert sorted array to Binary Search Tree (Java) stack overflow exception将排序数组转换为二叉搜索树(Java)堆栈溢出异常
【发布时间】:2014-12-29 06:35:18
【问题描述】:

这是一个程序,用于将元素按升序排序的数组转换为高度平衡的 BST。

我输入五个元素,将它们传递给一个数组,对数组进行排序并使用方法。

它会产生这个错误:

Exception in thread "main" java.lang.StackOverflowError
    at Solution.sortedArrayToBST(Node.java:26)

如何解决这个错误?

import java.util.*;

class Node {
    int val;
    Node left;
    Node right;

    Node(int x) {
        val = x;
    }
}

class Solution {

    public Node sortedArrayToBST(int[] num) {
        if (num.length == 0)
            return null;

        return sortedArrayToBST(num, 0, num.length - 1);
    }

    public Node sortedArrayToBST(int[] num, int start, int end) {

        int mid = (start + end) / 2;
        Node root = new Node(num[mid]);
        root.left = sortedArrayToBST(num, start, mid - 1);
        root.right = sortedArrayToBST(num, mid + 1, end);

        return root;
    }

    public static void main(String[] args) {

        Solution sol = new Solution();

        Scanner input = new Scanner(System.in);
        int[] numbers = new int[5];

        System.out.println("Please enter numbers");
        for (int i = 0; i < numbers.length; i++) {
            numbers[i] = input.nextInt();
        }

        // sorting
        for (int j = 0; j<numbers.length; j++) {
            for (int k = 0; k < numbers.length; k++){
                if (numbers[j] < numbers[k]) {
                    int buffer = numbers[j];
                    numbers[j] = numbers[k];
                    numbers[k] = buffer; 
                }
            }
        }

        sol.sortedArrayToBST(numbers, 0, 5);
        sol.sortedArrayToBST(numbers);
    }

}

【问题讨论】:

    标签: java arrays binary-tree binary-search-tree


    【解决方案1】:

    sortedArrayToBST 使用数组调用 sortedArrayToBST 并使用 3 个参数(这反过来又使用一个参数调用相同的方法)并且您永远不会摆脱它。

    您使用一个参数一次又一次地将相同大小的相同数组发送到 sortedArrayToBST。相反,您应该通过将其分成两个(低中和中 +1 到高)来创建新数组

    【讨论】:

      【解决方案2】:

      方法 sortedArrayToBST(num, start, end) 没有终止条件,这就是为什么它永远不会结束的原因是您收到 StackOverFlow 错误。 您需要在方法的开头添加一个条件: 如果(开始 > 结束)返回 null。 您可以在 Sorted Array to BST 问题上查看此 Youtube 视频: Create a balanced binary search tree from a sorted array

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-28
        • 2018-11-05
        • 2017-04-24
        • 1970-01-01
        • 2014-12-07
        • 2011-06-25
        相关资源
        最近更新 更多