无法运行java程序来构造BST

无法运行java程序来构造BST,java,tree,binary-search-tree,Java,Tree,Binary Search Tree,我正在尝试从前序和序构造BST // Construct Binary Tree From Inorder And Preorder public class Solution { public TreeNode buildTree(ArrayList<Integer> A, ArrayList<Integer> B) { return buildTreeUtil(A,0,A.size()-1,B,0,B.size()-1); }

我正在尝试从前序和序构造BST

// Construct Binary Tree From Inorder And Preorder

public class Solution {
    public TreeNode buildTree(ArrayList<Integer> A, ArrayList<Integer> B) {
        return buildTreeUtil(A,0,A.size()-1,B,0,B.size()-1);
    }
    public TreeNode buildTreeUtil(ArrayList<Integer> inOrder,int inOrderStart,int inOrderStop,
                        ArrayList<Integer> preOrder,int preOrderStart,int preOrderStop){

    if(inOrderStart > inOrderStop || preOrderStart>preOrderStop){
        return null;
    }
    TreeNode root = new TreeNode(preOrder.get(preOrderStart));
    int index = 0;
    for(int i=0;i<inOrder.size()-1;i++){
        if(inOrder.get(i)==preOrder.get(preOrderStart)){
            index = i;
            break;
        }
    }
    root.left = buildTreeUtil(inOrder,inOrderStart,index-1,
                            preOrder,preOrderStart+1,preOrderStart+(index-inOrderStart));
    root.right = buildTreeUtil(inOrder,index+1,inOrderStop,
                            preOrder,preOrderStart+index-inOrderStart+1,preOrderStop);
    return root;
    }
}


//从顺序和预顺序构造二叉树
公共类解决方案{
公共树节点构建树(ArrayList A,ArrayList B){
返回buildTreeUtil(A,0,A.size()-1,B,0,B.size()-1);
}
公共树节点buildTreeUtil(ArrayList-inOrder、int-inOrderStart、int-inOrderStop、,
ArrayList预订单、int预订单开始、int预订单停止){
如果(inOrderStart>inOrderStop | | preOrderStart>preOrderStop){
返回null;
}
树节点根=新树节点(preOrder.get(preOrderStart));
int指数=0;

对于(int i=0;i与IndexOutOfBoundsException无关,但以下代码行不正确地使用相等运算符==来比较两个整数实例,而应使用.equals()方法:

错误代码:

if(inOrder.get(i)==preOrder.get(preOrderStart)){
正确代码:

if(inOrder.get(i).equals(preOrder.get(preOrderStart))) {
IndexOutOfBoundsException可能发生,因为以下代码行未受到preOrderStart和preOrderStop参数值的保护,这些参数值为负值或大于ArrayList的size()-1:

考虑一下,如果变量索引的值为0,那么在上面的代码中会发生什么。参数index-1的值为-1

root.left = buildTreeUtil(inOrder,inOrderStart,index-1,
                       preOrder,preOrderStart+1,preOrderStart+(index-inOrderStart));
root.right = buildTreeUtil(inOrder,index+1,inOrderStop,
                       preOrder,preOrderStart+index-inOrderStart+1,preOrderStop);