我有一个问题,这段代码,我在许多网站搜索,但我没有得到我想要的答案。我从GeeksforGeeks复制了这段代码,但我不知道问题出在哪里。我在linux等其他平台上测试了这段代码,但它不能在那里工作,我还在eclipse IDE上测试了它,它在那里不能工作,这是我的代码:
class SolveBT<E> {
Node<E> treeRoot;
int preIndex = 0;
public SolveBT() {
treeRoot = new Node<>(null);
}
public void buildTree(E[] preOrder, E[] inOrder) {
treeRoot = makeTree(preOrder, inOrder, 0, inOrder.length - 1);
}
private Node<E> makeTree(E[] preOrder, E[] inOrder, int start, int end) {
if (start > end)
return null;
Node<E> node = new Node<>(preOrder[preIndex++]);
if (start == end)
return node;
int index = find(inOrder, start, end, node.getData());
node.setLeft(makeTree(inOrder, preOrder, start, index - 1));
node.setRight(makeTree(inOrder, preOrder, index + 1, end));
return node;
}
public int find(E[] arr, int start, int end, E value) {
int i;
for (i = start; i <end; i++) {
if (arr[i] == value)
return i;
}
return i;
}}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
SolveBT<String> tree = new SolveBT<>();
String[] preOrder = scanner.nextLine().trim().split(" ");
String[] inOrder = scanner.nextLine().trim().split(" ");
tree.buildTree(preOrder, inOrder);
AND THIS IS INPUT AND EXCEPTION :
A B D E C F
D B E A F C
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index
6 out of bounds for length 6
at SolveBT.makeTree(ForStudents.java:290)
at SolveBT.makeTree(ForStudents.java:299)
at SolveBT.makeTree(ForStudents.java:299)
at SolveBT.makeTree(ForStudents.java:299)
at SolveBT.makeTree(ForStudents.java:299)
at SolveBT.makeTree(ForStudents.java:299)
at SolveBT.makeTree(ForStudents.java:299)
at SolveBT.buildTree(ForStudents.java:281)
at ForStudents.main(ForStudents.java:15)发布于 2021-05-10 00:32:44
错误出在行中
Node<E> node = new Node<>(preOrder[preIndex++]);每次调用函数时,preIndexvariable都会递增。检查它的用法和逻辑。根据我的观点,它应该是静态。
https://stackoverflow.com/questions/67459879
复制相似问题