Convert sorted array to Binary Search Tree (Java) stack overflow exception

限于喜欢 提交于 2019-12-13 07:35:05

问题


This is a program for converting an array, where elements are sorted in ascending order, to a height balanced BST.

I input five element, pass them to an array, sort the array and use methods.

It produces this error:

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

How do I fix this error?

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

}

回答1:


sortedArrayToBST with array calls sortedArrayToBST with 3 parameter (which in turn calls same method with one parameter) and you never get out of it.

You are sending the same array of same size again and again to sortedArrayToBST with one parameter. Instead you should create new array by breaking it into two (low-mid and mid+1 to high)




回答2:


The method sortedArrayToBST(num, start, end) does not have a termination condition that is why it never ends are you are getting StackOverFlow error. You need to add a condition in the start of the method: if(start > end) return null. You can check this Youtube video on Sorted Array to BST problem: Create a balanced binary search tree from a sorted array



来源:https://stackoverflow.com/questions/26700100/convert-sorted-array-to-binary-search-tree-java-stack-overflow-exception

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!