一.题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
二.代码(C++)
class Solution {
private:
bool Verify(vector<int> seq,int begin, int root)
{
if(begin>=root)
return true;
int i=begin;
for(i;i<root;i++)
{
if(seq[i]>seq[root])
break;
}
for(int j=i+1;j<root;j++)
{
if(seq[j]<seq[root])
return false;
}
return Verify(seq, begin, i-1) && Verify(seq, i, root-1);
}
public:
bool VerifySquenceOfBST(vector<int> sequence) {
if(sequence.empty())
return false;
return Verify(sequence, 0, sequence.size()-1);
}
};
三.提交记录
四.备注
后序遍历:左、右、中。
由后序遍历定义可知,根节点是最后一个,前面的序列分别是根节点的左子树和右子树。这是一个二叉搜索树,左子树小于根节点,右子树大于根节点。同时,它的子结点也满足这些条件,迭代。