输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。
二叉树的后续遍历特点,a1 a2 a3 … ak ak+1 ak+2 … an-2 an-1 an 其中 an是根节点,必然存在左子树k到n-1是BST树的右子树,都会大于根节点,1到k-1位置都属于左子树,小于根节点。通过这种特征进行判断
bool judge(vector<int> &ivec, int left, int right)
{
if (left >= right)
return true;
int m = right;
while (m > left && ivec[m - 1] > ivec[right])
--m;
for (int i = m - 1; i >= left; --i)
{
if (ivec[i] > ivec[right])
{
return false;
}
}
return judge(ivec, left, m - 1) && judge(ivec, m, right - 1);
}
bool VerifySquenceOfBST(vector<int> sequence)
{
if (sequence.empty())
return false;
return judge(sequence, 0, sequence.size() - 1);
}