我正在尝试从PreOrder和inorder构建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;
}
}
这是一个例外
索引超出绑定的
发布于 2019-06-06 03:20:05
与IndexOutOfBoundsException无关,但以下代码行错误地使用相等运算符==来比较两个Integer实例,而应使用.equals()方法:
错误代码:
if(inOrder.get(i)==preOrder.get(preOrderStart)){
正确的代码:
if(inOrder.get(i).equals(preOrder.get(preOrderStart))) {
之所以可能发生IndexOutOfBoundsException,是因为以下代码行没有针对preOrderStart和preOrderStop参数值为负或大于数组列表的size()-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);
想想看,如果变量index的值为0,上面的代码会发生什么情况。参数index-1的值为-1。
https://stackoverflow.com/questions/56464733
复制相似问题