- 二叉搜索树也称为二叉排序树,就是任意结点值大于左子树的全部结点值,且小于右子树的全部结点值
- 若以顺序存储的方式存放,下标之间是有关系的,
![在这里插入图片描述](https://img-blog.csdnimg.cn/d25ab6715f6a453090ffbeedfe5db414.png)
- 因为是要检测是否为二叉排序树,所以要查看所有的子树的根是否大于左子树的所有结点的值以及小于右子树所有结点的值,可以想到从叶子结点开始向上检测。
typedef struct TTT{
int SqBiTNode[MAXSIZE];
int num;
}SqBiTree;
bool isBST(SqBiTree bt)
{
int *pmin,*pmax;
pmin = (int*)malloc(sizeof(int)*(bt.num));
pmax = (int*)malloc(sizeof(int)*(bt.num));
for(int i=0;i<bt.num;i++){
pmin[i] = pmax[i] = bt.SqBiTNode[i];
}
for(int i=bt.num-1;i>0;i--){
if(bt.SqBiTNode[i] != -1){
int m = (i-1)/2;
if(i&1 && bt.SqBiTNode[m]>pmax[i]){
pmin[m] = pmin[i];
}else if (!(i&1) && bt.SqBiTNode[m]<pmin[i]){
pmax[m] = pmax[i];
}else {
return false;
}
}
}
return true;
}