题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都不相同。
思路:数组中左边为小于根节点的部分,右边大于根节点。
#include <iostream>
using namespace std;
bool isSearchTree(int *numbers, int left, int right) {
if (numbers == NULL || right < left)
return false;
int i = left;
for (; i < right; ++i) {
if (numbers[i] > numbers[right])
break;
}
int mid = i - 1;
for (; i < right; ++i) {
if (numbers[i] < numbers[right])
return false;
}
bool result = true;
if (mid >= left)
result = isSearchTree(numbers, left, mid);
if (mid + 1 < right)
result = isSearchTree(numbers, mid + 1, right - 1);
return result;
}
int main() {
int a[] = {5, 7, 6, 9, 11, 10, 8};
int *numbers = a;
bool result = isSearchTree(numbers, 0, 6);
cout << result << endl;
return 0;
}