题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
满足条件的序列有这样的特征:
数组最后一个值mid为根节点,前面n-1个值可以分两部分,第一部分为比mid小,第二部分比mid大,递归判断是否满足这个特征即可
#include <iostream>
#include <string>
#include <memory>
#include <vector>
#include<cmath>
#include<algorithm>
#include<stack>
#include<map>
#include<sstream>
using namespace std;
class Solution {
public:
bool VerifySquenceOfBST(vector<int> sequence) {
if(sequence.size()==0) {
return false;
}
int mid=sequence[sequence.size()-1];
int flag=0;
int splitIndex=0;
for (int i = 0; i < sequence.size()-1; i++)
{
if(flag==0&&sequence[i]>mid) {
flag=1;
splitIndex=i;
}
if(sequence[i]<mid&&flag==1) {
return false;
}
}
vector<int> leftTree;
vector<int> rightTree;
for (int i = 0; i < sequence.size()-1; i++)
{
if(i<splitIndex) {
} else {
rightTree.push_back(sequence[i]);
}
}
if(leftTree.size()!=0&&!VerifySquenceOfBST(leftTree)) {
return false;
}
if(rightTree.size()!=0&&!VerifySquenceOfBST(rightTree)) {
return false;
}
return true;
}
};
int main()
{
vector<int> test={3,1,2};
Solution sol;
bool res=sol.VerifySquenceOfBST(test);
cout<<res<<endl;
system("pause");
return 0;
}