递归函数上的Java stackoverflow错误

1 java stack-overflow recursion

当我调用此函数时,为什么会出现stackoverflow错误?我检查了我的终端条件,但无法确定问题所在.

public static TreeNode buildTree(int t1, int t2, ListNode[] nodeArray) {     
    if(t1 == t2){
        TreeNode temp = new TreeNode(nodeArray[t1].val);
        temp.left = null;
        temp.right = null;
        return temp;
    }
    else if(t1 > t2){
        return null;
    }

    else{   
        TreeNode root = new TreeNode(nodeArray[(t1+t2)/2].val);
        root.left = buildTree(0,(t1+t2)/2-1,nodeArray);
        root.right = buildTree((t1+t2)/2+1,nodeArray.length-1,nodeArray);
        return root;
    }
}
Run Code Online (Sandbox Code Playgroud)

Era*_*ran 6

看起来递归方法应该在t1和之间的范围内工作t2,所以递归调用应该是:

root.left = buildTree(t1,(t1+t2)/2-1,nodeArray);
root.right = buildTree((t1+t2)/2+1,t2,nodeArray);
Run Code Online (Sandbox Code Playgroud)

您当前的递归调用从不缩小范围(您总是将一个范围从0传递到中间,另一个范围从中间到结尾nodeArray),因此递归永远不会结束.