题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
解:根据后序遍历的特征,和二叉搜索树的特性(左边的任何节点比根节点小,右边的任何节点比根节点大),只要找到根节点,然后找出左子数和右子树的遍历顺序,左子数和右子树也是二叉搜索树,再进行判断和递归。就可以得出解。
class Solution {
public:
bool VerifySquenceOfBST(vector<int> sequence) {
if(sequence.size() == 0)
return false;
int tail = sequence[sequence.size() - 1];
vector<int> first;
vector<int> second;
int i = 0;
for(; i < sequence.size() - 1; i++)
{
if(sequence[i] < tail)
first.push_back(sequence[i]);
else
break;
}
for(; i < sequence.size() - 1; i++)
{
if(sequence[i] > tail)
second.push_back(sequence[i]);
else
return false;
}
if(first.empty() && second.empty())
return true;
else if(first.empty())
return VerifySquenceOfBST(second);
else if(second.empty())
return VerifySquenceOfBST(first);
else
return VerifySquenceOfBST(first) && VerifySquenceOfBST(second);
}
};