题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
思路
采用递归方法
#include<iostream>
#include<vector>
#include<limits.h>
using namespace std;
bool core(vector<int> sequence, int left, int right) //left, right可减少开vector。节省空间
{
int size = right - left;
int i;
if(size <= 0) //**可能出现不存在右子树的情况,此时左右子树分界线i==right
return true;
int root = sequence[right];
for(i = left; i < right; i++) //将左子树与右子树分开
{
if(sequence[i] > root)
break;
}
for(int j = i; j < right; j++) //右子树不全是小于root,不是搜索树
{
if(sequence[j] < root)
return false;
}
return core(sequence, 0, i-1) && core(sequence, i, right-1); //递归
}
bool VerifySquenceOfBST(vector<int> sequence)
{
if(sequence.size() <= 2)
return true;
return core(sequence, 0, sequence.size() - 1);
}
int main()
{
int temp;
vector<int> ver;
while(cin>>temp) //很好用 ,ctl+z停止输入
ver.push_back(temp);
cout<<VerifySquenceOfBST(ver);
cout<<ver.size()-1;
return 0;
}
vector.size()返回一个无符号数