原题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
我的代码:(C++)
#include<iostream>
#include<vector>
using namespace std;
bool VerifySquenceOfBST(vector<int> sequence) {
static int count = 0;//记录函数调用次数
count++;
unsigned len = sequence.size();
if (len == 1)
return true;
if (len == 0) {
if (count == 1)
return false;//第一次调用此函数时,返回false
else return true;//递归调用此函数时,返回true
}
int root = sequence[len - 1];//序列最右边为根
int i = 0;
vector<int> Ltree, Rtree;
if (len > 2) {
/*记录左子树序列最右边的元素*/
while (sequence[i]<root) {
Ltree.push_back(sequence[i]);
i++;
}
/*记录右子树序列最右边的元素*/
for (; i<len - 1; i++) {
if (sequence[i] < root)
return false;
Rtree.push_back(sequence[i]);
}
}
else {//序列长度为2时,序列只含有左子树或只含有右子树
if (sequence[0] > root)
Rtree.push_back(sequence[i]);//只含有右子树
if (sequence[0] < root)
Ltree.push_back(sequence[i]);//只含有左子树
}
return VerifySquenceOfBST(Ltree) && VerifySquenceOfBST(Rtree);
}
int main() {
//vector<int> sequence = { 2,4,3,6,8,7,5 };
vector<int> sequence;
int result = VerifySquenceOfBST(sequence);
if (result)
cout << "True!" << endl;
else cout << "False!" << endl;
return 0;
}
使用未初始化的vector<int> sequence(序列为空)作为实参调用函数VerifySquenceOfBST,在VS下输出"False!",但在牛客网上?