import java.util.*;
public class Solution {
public boolean VerifySquenceOfBST(int[] sequence) {
// 处理空数组的情况
if (sequence == null || sequence.length == 0) {
return false;
}
return judge(sequence, 0, sequence.length - 1);
}
// 使用索引范围而不是复制数组,提高效率
private boolean judge(int[] sequence, int start, int end) {
// 递归出口:子树为空或只有一个节点
if (start >= end) {
return true;
}
int rootVal = sequence[end]; // 根节点值
int leftEnd = start; // 左子树结束位置
// 找到第一个大于根节点的元素,划分左右子树
while (sequence[leftEnd] < rootVal) {
leftEnd++;
}
// 验证右子树所有元素都大于根节点
for (int i = leftEnd; i < end; i++) {
if (sequence[i] <= rootVal) {
return false; // 右子树存在小于等于根节点的值,不合法
}
}
// 递归验证左右子树
return judge(sequence, start, leftEnd - 1) && // 左子树
judge(sequence, leftEnd, end - 1); // 右子树
}
}