问题:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
解析:1)所谓二叉搜索树,是指空树,或其左子树的元素都小于根元素,右子树的元素都大于根元素,且其左子树和右子树都是二叉搜索树。
2)二叉搜索树后序遍历序列有如下特征:a、最后一个元素是根元素;b、左侧元素可以分为left、right两部分数组,分别是根元素的左孩子和右孩子。
解题思路:
声明两个数组,存放根元素的左子树和右子树,在存放过程中,若出现错误情况,可直接返回false,若分组成功,则分别对根元素的左子树和右子树进行递归。具体代码如下所示:
bool VerifySquenceOfBST(vector<int> sequence) {
int size=sequence.size();
if(0==size)
return false;
if(1==size)
return true;
int midval;
vector<int> left,right;
midval=sequence.back();
sequence.pop_back();
vector<int>::iterator it;
for(it=sequence.begin();it!=sequence.end();it++)
if(*it>midval)
{
if(left.empty ())
left.push_back(1);
break;
}
else
left.push_back(*it);
for(;it!=sequence.end();it++)
if(*it>midval)
right.push_back(*it);
<span style="white-space:pre"> </span>else
return false;
if(right.empty())
right.push_back(1);
return(VerifySquenceOfBST(left)&&VerifySquenceOfBST(right));
}