二叉搜索树:根节点的值大于左子节点的值,小于右子节点的值,并且其左右子树也是一个二叉搜索树;
后序遍历:左->右->根
思路就是:数组中最后一个元素显示就是根节点,然后根据大小关系,把数组分为左右子树,再做遍历即可;
bool isBstPost(std::vector<int>& array) {
int length = array.size();
if(length == 0)
return false;
int root = array[length-1];
std::vector<int> leftTree;
std::vector<int> rightTree;
int i = 0;
for(; i < length-1; ++i) {
if(array[i] > root)
break;
leftTree.push_back(array[i]);
}
int j = i;
for(; j < length-1; ++j) {
if(array[i] < root)
return false;
rightTree.push_back(array[j]);
}
bool left = 1,right = 1;
if(leftTree.size() > 1)
left = isBstPost(leftTree);
if(rightTree.size() > 1)
right = isBstPost(rightTree);
return (left&&right);
}