题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。
解答
递归
- 如果内存爆了,那应该是出现了无限递归的情况。仔细检查父函数和子函数的实参有没有可能是相同的。
- 输入的数组可能是空的。
class Solution {
public:
bool d(vector<int> s, int p, int q){
if(p >= q) return true;
int root = s[q], mid;
for(mid = p; mid < q; mid++)
if(s[mid] > root) break;
for(int i = mid + 1; i < q; i++)
if(s[i] < root) return false;
return d(s, p, mid - 1) && d(s, mid, q - 1);
}
bool VerifySquenceOfBST(vector<int> sequence) {
if(sequence.size() == 0) return false;
return d(sequence, 0, sequence.size() - 1);
}
};