二叉搜索树的后序遍历序列
- 时间限制:1秒
- 空间限制:32768K
题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。
如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
牛客网题目链接:点击这里
VS2010代码:
#include<iostream>
#include<vector>
using namespace std;
class Solution {
public:
bool IsBackOrder( vector<int> &Seque, int begin, int end )
{
if(begin==end)
{
//cout<<1<<'-';
return 1;
}
int root=Seque[end];
int p=begin;
int temp=0;
while(Seque[p]<root && p<end)
p++;
temp=p;
while(Seque[p]>root && p<end)
p++;
if(p!=end)
return 0;
else if(temp==begin)
return IsBackOrder(Seque, temp,end-1);
else if(temp==end)
return IsBackOrder(Seque, begin,temp-1);
else
return IsBackOrder(Seque, begin,temp-1) && IsBackOrder(Seque, temp,end-1);
}
bool VerifySquenceOfBST(vector<int> sequence) {
if( !sequence.empty() )
return IsBackOrder( sequence, 0, sequence.size()-1 );
return 0;
}
};
//测试用例1:4,7,5,9,11,10,8 通过
//测试用例2:4,7,5,11,10,8 通过
//测试用例3:4,5,9,11,10,8 通过
void test(vector<int> &test)
{
test.push_back(4);
//test.push_back(7);
test.push_back(5);
//test.push_back(9);
//test.push_back(11);
//test.push_back(10);
test.push_back(8);
}
int main()
{
Solution s1;
vector<int> test1;
test(test1);
cout<<s1.VerifySquenceOfBST(test1);
}