二叉搜索树的后序遍历序列
题目描述
class Solution {
public:
bool VerifySquenceOfBST(vector<int> sequence) {
int size = sequence.size();
if(0 == size)
return false;
return isLastOrder(sequence,0,size-1);
}
private:
bool isLastOrder(vector<int>& sequece,int b,int e)
{
if(b == e)
return true;
int mid = b;
while(sequece[mid++] <sequece[e] && mid <e);
int tmp = mid; //取得中间节点 即为根节点 // 左子树的节点都小于中间节点的值
while(sequece[tmp++] >sequece[e] && tmp <e);//sequece[e]作为最后一个数 、、左右根后序遍历
if(tmp < e)
{
return false;
}
if(mid == b || mid == e) //证明有子树的节点
{
return isLastOrder(sequece,b,e-1);
}
else
{
return (isLastOrder(sequece,b,mid-1) && isLastOrder(sequece,mid,e-1));
}
}
};