【2022统考真题】数据结构-二叉树判断是否是BST
题目:给一个顺序数组存放的二叉树,判断是否是二叉搜索树BST。前提:空结点用-1表示。
问题思路:类似链表二叉树,用递归的思想来判断是否为BST。参考98验证二叉搜索树。
代码:
bool helper(int SqBiTNode[],int idx,long long lower,long long upper,int treenum){
if(idx >= treenum ||SqBiTNode[idx]==-1)return true;//这里要考虑是否越界
if(SqBiTNode[idx] <=lower || SqBiTNode[idx]>=upper){
return false;//判断自己是否越界
}
return helper(SqBiTNode,idx*2,lower,SqBiTNode[idx],treenum)&&helper(SqBiTNode,idx*2+1,SqBiTNode[idx],upper,treenum);//然后递归判断左右子树
}
bool isBST(SqBiTree *root){
return helper(root->SqBiTNode,1,LONG_MIN,LONG_MAX,root->ElemNum);//从1开始,一一对应;
}
重要
顺序存储的二叉树如果是1开始的那么\(idx->left = idx*2;idx->right = idx*2+1\);
如果是0,那么我们\(idx->left = idx*2+1;idx->right = idx*2+2\);
可以看作1开头的数组整体左移一位。

浙公网安备 33010602011771号