您的位置:首页 > Web前端

(剑指offer)二叉搜索树的后序遍历序列

2018-03-22 19:36 253 查看

题目描述

输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。

bool VerifySquenceOfBST(vector<int> sequence)
{
if(sequence.empty())return false;
const int root=sequence.back();
bool flagl=true,flagr=true;
vector<int>::iterator itb=sequence.begin(),ite;
vector<int> temp;

while(*itb<root&&itb<sequence.end()-1)itb++;
ite=itb;
while(ite<sequence.end()-1)
{
if(*ite<root)return false;
ite++;
}
if(itb>sequence.begin())//至少有一个值才递归左子叶
{
temp.assign(sequence.begin(),itb);
flagl=VerifySquenceOfBST(temp);
}
if(itb<sequence.end()-1)//至少有一个根值和一个右子叶
{
temp.assign(itb,sequence.end()-1);
flagr=VerifySquenceOfBST(temp);
}
return flagl&&flagr;
}
int main()
{
vector<int>  a= {1,8,2,4,6,7,3};
cout<<VerifySquenceOfBST(a)<<endl;
return 0;
}


assign(a,b);放入的是a到b-1。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ 剑指offer