整体思想是,
- 中序遍历,
- 存储得到的遍历序列,⭐⭐⭐
- 从头到尾扫描序列,出现逆序则返回false,否则返回true
因为这是函数题,1.递归不能用 2.STL不能用
然后就是数组模拟栈⭐
bool IsBST ( BinTree T ){
if(!T) return true;
BinTree* temp=(BinTree*)malloc(sizeof(BinTree)*100100);
int* result=(int *)malloc(sizeof(int)*100100);
int i=0,j=0,length=0;
while(T||i!=0){
while(T){
temp[i++]=T;
T=T->Left ;
}
T=temp[--i];
result[length++]=T->Data ;
T=T->Right ;
}
for(i=1;i<length;i++){
if(result[i-1]>=result[i]) return false;
}
return true;
}
小知识点:
- 开辟指针数组的内存空间
BinTree* temp=(BinTree*)malloc(sizeof(BinTree)100100)
int result=(int *)malloc(sizeof(int)*100100);