题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出yes,否则输出no。假设输入的数组的任意两个数字都互不相同。
解题思路
中序与后序建树,如果能建成树则是二叉搜索树的后序遍历,否则不是。
class Solution {
public:
bool consTree(vector<int> in,vector<int> post,int in_s,int in_e,int post_s,int post_e){
if(in_s>in_e || post_s>post_e) return true;
int root = post[post_e],i = in_s;
while(i<=in_e && in[i]!=root) ++i;
if(i>in_e) return false;
if(!consTree(in,post,in_s,i-1,post_s,post_s+i-in_s-1)) return false;
return consTree(in,post,i+1,in_e,post_s+i-in_s,post_e-1);
}
bool VerifySquenceOfBST(vector<int> post) {
int len = post.size();
if(len == 0) return false;
vector<int> in(post.begin(),post.end());
sort(in.begin(),in.end());
return consTree(in,post,0,len-1,0,len-1);
}
};