题目:
输入一个整数数组,判断该数组是不是一颗二叉搜索树的后续遍历的结果
分析:
//输入一个整数数组,判断该数组是不是一颗二叉搜索树的后续遍历的结果
//如果是返回true,否则返回false
//分析:由于二叉搜索树的特性,左子树一定小于根节点,右子树一定大于根节点
//所以在一颗二叉搜索树中不会出现两个相同的节点,
bool IsBST(int arr[],int len)
{
assert(arr !=NULL);
if(len < 0)
return false;
//首先由于二叉树的特性,所以根节点是最后一个节点
int root=arr[len-1];
int i=0;
while(i <len-1)
{
//找到第一个比根节点大的节点,从这一分为二
//小于i的是根节点左子树,大于i的是右子树
if(arr[i] >root)
break;
++i;
}
int j=i+1;
while(j <len-1)
{
//由于二叉搜索树的性质,所以如果找到右子树中有比root小的树
//那就不是二叉搜索树,返回false
if(arr[j] <root)
return false;
}
//否则就递归的去从左右子树中继续找
bool leftchild=true;
//从i下标隔开,小于i的是根节点左子树
//大于i下标的是右子树
if(i >0)
leftchild=IsBST(arr,i);
//递归右子树
bool rightchild=true;
if(i < len-1)
rightchild=IsBST(arr,len-i-1);
//最后返回左右子树相 && 的结果
return (leftchild && rightchild);
}