题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
思路:
二叉搜索树的性质:左子树小于根节点值,右子数大于根节点值。
后序遍历序列的最后一个值为根节点,则根据根节点可以将序列分成左右子树。判断依据:左子树的值均小于根,右子树的值均大于根。
解题思路:首先遍历序列得到左子树则break,对右子树进行判断(右子树的值是否均大于根)
class Solution {
public:
bool VerifySquenceOfBST(vector<int> sequence) {
return VSofBST(sequence,0,sequence.size()-1);
}
bool VSofBST(vector<int> seq, int begin, int end)
{
if(seq.empty() || begin>end) return false;
int i=begin;
for(; i<end; i++)
{
if(seq[i]>seq[end]) break;
}
for(int j=i; j<end; j++)
{
if(seq[j]<seq[end]) return false;
}
bool left = true;
if(i>begin) left=VSofBST(seq, begin, i-1);
bool right = true;
if(i<end-1) right=VSofBST(seq, i, end-1);
return left && right;
}
};