题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
做这道题之前,我们至少要对二叉搜索树的性质有一定的了解,其中与本题关系最为紧密的一条性质就是二叉搜索树中根结点的左子树的元素值均要小于根结点的值,根结点的左子树的值均要大于根结点上的值;因此,我们利用上述性质可以递归遍历整个向量中的元素判定该数组是不是某二叉搜索树的后序遍历的结果。
这里需要注意的是,要分别递归根结点左右子树,以及设置什么条件下,递归应当结束并返回相应的结果。具体细节见代码:
class Solution {
public:
bool Verify(vector<int> seq, int start, int end)
{
if (end - start <= 1)
{
return true;
}
int temp = seq[end];
int i = start;
int m = 0;
while (i < end)
{
if (seq[i] < temp)
{
i++;
}
else
{
break;
}
}
m = i;
while (m < end)
{
if (seq[m] > temp)
{
m++;
}
else
{
return false;
}
}
return Verify(seq, start, i-1) && Verify(seq, i, end-1);
}
bool VerifySquenceOfBST(vector<int> sequence) {
int tem_end = sequence.size() - 1;
if (sequence.size() == 0)
{
return false;
}
return Verify(sequence, 0, tem_end);
}
};