题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。如果是返回
true
,否则返回
false
。
例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果:
8
/ \
6 10
/ \ / \
5 7 9 11
因此返回true
#include<iostream>
using namespace std;
bool verifySquenceOfBST(int *squence, int length){
if(squence == NULL || length <= 0){
return false;
}
int lastNum = squence[length-1];
int i;
for(i=0; i<length-1; i++){
if(squence[i] > lastNum){
break;
}
}
int j;
for(j=i; j<length-1; j++){
if(squence[j] < lastNum){
return false;
}
}
bool left = true;
if(i > 0){
left = verifySquenceOfBST(squence, i);
}
bool right = true;
if(i < length-1){
right = verifySquenceOfBST(squence+i, length-1-i);
}
return left && right;
}
int main(){
int squence[7] = {
5, 4, 6, 9, 11, 10, 8
};
bool result = verifySquenceOfBST(squence, 7);
if(result){
printf("true\n");
}else{
printf("false\n");
}
return 0;
}