剑指offer面试题24:二叉搜索树的后序遍历序列

来源:互联网 发布:淘宝店铺上架宝贝软件 编辑:程序博客网 时间:2024/05/21 18:39

题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回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;}
0 0
原创粉丝点击