二叉搜索树的后序遍历序列
题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
#include <iostream>
#include <vector>
using namespace std;
bool VerifySquenceOfBST(vector<int> vec)
{
if (vec.size() == 0)
{
return false;
}
int root = vec.back();
vector<int> left;
vector<int> right;
vector<int>::iterator it = vec.begin();
while (it != vec.end()-1)
{
if (*it<root)
{
left.push_back(*it);
it++;
}
else
{
break;
}
}
while (it != vec.end()-1)
{
if (*it > root) //从第一个大于根节点的节点开始,算作右子树节点
{
right.push_back(*it);
it++;
}
else
return false; //在右子树发现比根结点小的节点,则返回false
}
if (left.size() == 0 && right.size()>0) return VerifySquenceOfBST(right);
else if (right.size() == 0 && left.size()>0) return VerifySquenceOfBST(left);
else if (right.size()>0 && left.size() >0) return VerifySquenceOfBST(left) && VerifySquenceOfBST(right);
else return true;
}
int main()
{
vector<int> vec = {0,2,1,4,3,6,9,8,7,5};
bool result = VerifySquenceOfBST(vec);
if (result == true) cout << "Yes" << endl;
else cout << "No" << endl;
return 0;
}