剑指offer——二叉搜索树中的后序遍历序列
题目描述:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
输入描述:
输入:5 7 6 9 11 10 8
输出:true
C++代码:
class Solution {
public:
//非递归方式
bool VerifySquenceOfBST(vector<int> sequence) {
int size = sequence.size();
if (size == 0)return false;
int i = 0;
while (--size)
{
while (sequence[i++] < sequence[size]);
while (sequence[i] > sequence[size]){
if(i>=size) return true;
i++;
}
if (i < size)return false;
i = 0;
}
return true;
}
//递归方式
bool judge(vector<int>& a, int l, int r) {
if (l >= r) return true;
int i = r;
while (i > l && a[i - 1] > a[r]) --i;
for (int j = i - 1; j >= l; --j) if (a[j] > a[r]) return false;
return judge(a, l, i - 1) && (judge(a, i, r - 1));
}
public:
bool VerifySquenceOfBST2(vector<int> sequence) {
if (sequence.empty())return false;
return judge(sequence, 0, sequence.size() - 1);
}
};
天上我才必有用,千金散尽还复来!