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)
看起来递归方法应该在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),因此递归永远不会结束.
| 归档时间: |
|
| 查看次数: |
82 次 |
| 最近记录: |