题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。 如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
分析:一棵二叉搜索树的后序遍历结果,必然是其中序遍历顺序入栈的其中一种出栈序列
实现:先对输入进行排序获取中序遍历结果,然后使用栈模拟遍历过程,最后栈为空,则后序遍历成立,代码如下:

class Solution {
public:
    bool VerifySquenceOfBST(vector<int> sequence) {
        if (sequence.empty()) {
            return false;
        }

        vector<int> midSeq;
        midSeq.resize(sequence.size());
        copy(sequence.begin(), sequence.end(), midSeq.begin());
        sort(midSeq.begin(), midSeq.end());

        stack<int> s;
        for (int i = 0, r = 0; i <= midSeq.size(); ) {            
            if (!s.empty() && s.top() == sequence[r]) {
                s.pop();
                r++;
            }
            else if (i == midSeq.size()) {
                break;
            }
            else {
                s.push(midSeq[i]);
                i++;
            }
        }
        return s.empty();
    }
};