// 面试题33:二叉搜索树的后序遍历序列
// 题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。
// 如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。
// BST:Binary Search Tree,二叉搜索树
static bool is_bst_lrd(const int* arr, int len)
{
if(arr==nullptr || len <= 0)
{
return false;
}
int root = arr[len - 1];
// 在二叉搜索树中左子树的结点小于根结点
int i = 0;
for(; i < len-1; ++ i)
{
if(arr[i] > root)
{
break;
}
}
// 在二叉搜索树中右子树的结点大于根结点
int j = i;
for(; j < len - 1; ++ j)
{
if(arr[j] < root)
{
return false;
}
}
// 判断左子树是不是二叉搜索树
bool left = true;
if(i > 0)
left = is_bst_lrd(arr, i);
// 判断右子树是不是二叉搜索树
bool right = true;
if(i < len - 1)
right = is_bst_lrd(arr + i, len - i - 1);
return (left && right);
}