当我调用此函数时,为什么会出现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;
}
}
答案 0 :(得分:6)
看起来递归方法应该在t1
和t2
之间的范围内工作,所以递归调用应该是:
root.left = buildTree(t1,(t1+t2)/2-1,nodeArray);
root.right = buildTree((t1+t2)/2+1,t2,nodeArray);
您当前的递归调用从不缩小范围(您总是将一个范围从0传递到中间,另一个范围从nodeArray
的中间到结尾),因此递归永远不会结束。
答案 1 :(得分:0)
这只是调试101。
将以下行作为方法中的第一行:
System.out.println("Entry, t1 = " + t1 + ", t2 = " + t2);
由此,您将能够计算出流量。
答案 2 :(得分:0)
使用数组[0,1,2,3,4]调用Your方法的简单示例,如buildTree(0,4,array):
1 root = 2;
2 buildTree(0, 1);
3 root = 0;
4 buildTree(0, -1);
5 null;
6 buildTree(1, 4);
7 root = 2;
8 buildTree(0, 1); // endless recursion. see 2nd line call