注册一亩三分地论坛,查看更多干货!
您需要 登录 才可以下载或查看附件。没有帐号?注册账号
x
Given an array of numbers, verify whether it is the correct preorder traversal sequence of a binary search tree. You may assume each number in the sequence is unique.
public class Solution {
public boolean verifyPreorder(int[] preorder) {
return helper(preorder, 0, preorder.length - 1, Integer.MIN_VALUE, Integer.MAX_VALUE);
}
public boolean helper(int[] preorder, int i, int j, int min, int max) {
if (i > j) return true;
int middle = preorder[i];
if (middle > max || middle < min) return false;
int k = i + 1;
while (k <= j && preorder[k] <= middle) {
k++;
}
return helper(preorder, i + 1, k - 1, min, middle) && helper(preorder, k, j, middle, max);
}
}
上面的代码 数据比较大时候会stackoverflow.
但是要是把 int k = i + 1; 改成int k = i, 就可以AC。
想问一下各位大神这是为什么呢。。。加入k = i, 然后必然符合下面的while循环至少一次 所以不就是和k = i + 1一样的吗
为什么k = i + 1 就会overflow, k = i 就不会呢?
|