将排序数组转换为二进制搜索树(Java)堆栈溢出异常
这是一个程序,用于将元素按升序排序的数组转换为高度平衡的BST 我输入五个元素,将它们传递给数组,对数组进行排序并使用方法 它会产生以下错误:将排序数组转换为二进制搜索树(Java)堆栈溢出异常,java,arrays,binary-tree,binary-search-tree,Java,Arrays,Binary Tree,Binary Search Tree,这是一个程序,用于将元素按升序排序的数组转换为高度平衡的BST 我输入五个元素,将它们传递给数组,对数组进行排序并使用方法 它会产生以下错误: Exception in thread "main" java.lang.StackOverflowError at Solution.sortedArrayToBST(Node.java:26) 如何修复此错误 import java.util.*; class Node { int val; Node left;
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);
}
}
SorterDarrayToBST with array使用3个参数调用SorterDarrayToBST,这反过来又使用一个参数调用相同的方法,您永远无法摆脱它
您正在使用一个参数一次又一次地将相同大小的相同数组发送到SorterDarrayToBST。相反,您应该通过将其分为两个低-中和中+1到高来创建新数组方法SorterDarrayTobstnum,start,end没有终止条件,这就是为什么它永远不会结束,因为您遇到StackOverFlow错误。 您需要在方法的开头添加一个条件: ifstart>end返回空值。 您可以在排序阵列上检查此Youtube视频以解决BST问题: