23.二叉搜索树的后序遍历序列
题目
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
思路
二叉搜索树性质就是左子树小于根节点小于右节点,以最右侧为根,判断一下让数组左侧均小于根,根小于右侧,然后分成两块继续运算即可。
(我真的不知道为什么越界啊,我也不知道为什么突然就不越界了)
代码
public boolean vt(int[] sequence, int start, int end) {
if (start>=end) {
return true;
}
int root = sequence[end];
int mid = start;
for (; mid < end; mid++) {
if (root < sequence[mid]) {
break;
}
}
for (int i = mid; i < end; i++) {
if (root > sequence[i]) {
return false;
}
}
boolean left = true;
boolean right = true;
if (start <= mid - 1) {
left = vt(sequence, start, mid - 1);
}
if (mid <= end - 1) {
right = vt(sequence, mid, end - 1);
}
return left && right;
}
public boolean VerifySquenceOfBST(int[] sequence) {
if (sequence == null || sequence.length == 0) {
return false;
}
if (sequence.length < 3) {
return true;
}
return vt(sequence, 0, sequence.length - 1);
}