题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。 如果是则输出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();
}
};
京公网安备 11010502036488号