题目
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。
思路
对于一个后序序列来说,最后一个元素就是根节点,根节点的左子树节点值都小于根节点,并且小于右子树的节点值,因为是BST,这样,遍历序列,找到第一个大于根节点值的位置,那么此后的所有值一定也必须大于根节点的值,否则就false,再递归就可以了
代码
class Solution {
public:
bool verifyPostorder(vector<int>& postorder) {
if(postorder.size()<=1)
return true;
return f(postorder,0,postorder.size()-1);
}
bool f(vector<int>v,int L,int R){
if(L>R)
return true;
int root=v[R];
int k;
for(k=L;k<=R;k++)
if(v[k]>=root)
break;
for(int i=k;i<R;i++)
if(v[i]<root)
return false;
bool left=true,right=true;
left=f(v,L,k-1);
right=f(v,k,R-1);
return left&&right;
}
};