(一)题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
(二)思路分析
后序遍历左右根,左子树结点值都比根节点的值小,右子树的值都比根节点的值大,根据递归算法
(三)代码实现
class Solution {
public:
bool VerifySquenceOfBST(vector<int> sequence) {
return bst(sequence, 0, sequence.size()-1);
}
private:
bool bst(vector<int> seq, int begin, int end)
{
//边界条件
if((seq.size() == 0) || (begin > end))
{
return false;
}
//定义根节点
int root = seq[end];
//左子树结点的值都比根节点的值小
int i = begin;
for(; i<end; i++)
{
if(seq[i] > root)
{
break;
}
}
//右子树结点的值都比根节点的值大
int j = i;
for(; j<end; j++)
{
if(seq[j] < root)
{
return false;
}
}
//判断左子树
bool left = true;
if(i > begin)
{
left = bst(seq, begin, i-1);
}
//判断右子树
bool right = true;
if(i < end-1)
{
right = bst(seq, i, end-1);
}
return (left && right);
}
};