首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >无法运行我的java程序来构造BST

无法运行我的java程序来构造BST
EN

Stack Overflow用户
提问于 2019-06-06 00:41:08
回答 1查看 24关注 0票数 -1

我正在尝试从PreOrder和inorder构建BST

代码语言:javascript
复制
// 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;
    }
}

这是一个例外

索引超出绑定的

EN

回答 1

Stack Overflow用户

发布于 2019-06-06 03:20:05

与IndexOutOfBoundsException无关,但以下代码行错误地使用相等运算符==来比较两个Integer实例,而应使用.equals()方法:

错误代码:

代码语言:javascript
复制
if(inOrder.get(i)==preOrder.get(preOrderStart)){

正确的代码:

代码语言:javascript
复制
if(inOrder.get(i).equals(preOrder.get(preOrderStart))) {

之所以可能发生IndexOutOfBoundsException,是因为以下代码行没有针对preOrderStart和preOrderStop参数值为负或大于数组列表的size()-1的情况进行保护:

代码语言:javascript
复制
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);

想想看,如果变量index的值为0,上面的代码会发生什么情况。参数index-1的值为-1。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56464733

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档