设计算法以构造有n个元素(下标范围从1到n)的二分查找判定树
void bstFromArr(btNode *&T, elementType A[],int low, int high){
int mid;
if (low < high){
mid = (low + high) / 2;
T = new btNode;
T->data = A[mid];
T->lChild = NULL;
T->rChild = NULL;
bstFromArr(T->lChild, A, low, mid-1);
bstFromArr(T->rChild, A, mid+1, high);
}
}
对给定的二叉排序树,求出在等概论情况下的平均查找长度
void inSum(btNode* T, int lev, int &n, int &sum)
{
if(T)
{
inSum(T->lChild, lev+1, n, sum);
n++;
sum=sum+lev;
inSum(T->rChild, lev+1, n, sum);
}
}
假设其中各结点的值均不相同,设计算法以判断该二叉树是否是二叉排序树
int isBst(btNode *T)
{
if(T==NULL)
return 1;
else if(T->lChild==NULL && T->rChild==NULL)
return 1;
else if(T->lChild && T->rChild==NULL)
{
if(T->data<T->lChild->data)
return 0;
else
return isBst(T->lChild);
}
else if(T->lChild==NULL && T->rChild)
{
if(T->data>T->rChild->data)
return 0;
else
return isBst(T->rChild);
}
else
{
if(T->data<T->lChild->data || T->data>T->rChild->data)
return 0;
else
return isBst(T->lChild) && isBst(T->rChild);
}
}