https://blog.csdn.net/derrantcm/article/details/46705725
bool verifyLastRoot(int a[], int start, int end) {
if (start >= end) {
return true;
}
int rootValue = a[end];
int index = start;
while (index <= end-1 && a[index] < rootValue) {
index++;
}
// 找到了右子树的第一个位置
int rightIndex = index;
while (index <= end-1 && a[index] > rootValue) {
index++;
}
// rightIndex 到 end-1 的位置一定比end大,且 start到 rightIndex-1 的位置一定比end小。
if (index != end) {
return false;
}
// 递归完成左右子树验证
return verifyLastRoot(a,start,rightIndex-1) && verifyLastRoot(a,rightIndex,end-1);
}
bool verifyLast(int a[], int len) {
if (a == NULL || len == 0) {
return false;
}
return verifyLastRoot(a, 0 , len-1);
}
int data[] = {4, 6, 12, 8, 16, 14, 10};
bool verifyLast1 = verifyLast(data, 7);