我的解题:
后序遍历对于树和子树来说,父节点都在最后
从前先后遍历找到第一个大于最后元素的位置,将序列分为三部分,左子树,右子树,根节点
从刚找到的位置向后遍历,看是否每个节点都大于最后元素(小于就return false)
class Solution {
public:
bool verifyPostorder(vector<int>& postorder) {
if(postorder.empty()) return true;
return func(postorder,0,postorder.size()-1);
}
bool func(vector<int>& v,int l,int r){
if(l>r) return true;
int root=v[r];
int i=l;
for(;i<r;i++){
if(v[i]>root) break;
}
int j=i;
for(;j<r;j++){
if(v[j]<root) return false;
}
bool a=true,b=true;
if(i>l) a=func(v,l,i-1);
if(i<r-1) b=func(v,i,r-1);
return a&&b;
}
};