以下算法在指针T所指的二叉排序树上的查找键值等于K的结点。成功时回送指向该结点的指针;否则回送
bitreptr search_bst(bitreptr T,keytype K)
{ if(T==NULL)return(NULL);
else switch
{ case T—>key==K:______;
case______: return(search_bst(T—>lchild,K));
case______: return(search_bst(T—>rchild,K));
}
}
bitreptr search_bst(bitreptr T,keytype K)
{ if(T==NULL)return(NULL);
else switch
{ case T—>key==K:______;
case______: return(search_bst(T—>lchild,K));
case______: return(search_bst(T—>rchild,K));
}
}
回指向该结点的指针。要求算法的平均时间复杂度为O(log2n)。二叉搜索树的每个结点中除data、ieftChild、rightChild等数据成员外、增加一个count成员,保存以该结点为根的子树上的结点个数。
A.冒泡排序是相邻元素进行比较
B.排序算法通常把数据保存在数组中
C.二分查找必须在有序序列中进行
D.选择排序是拿每轮的第一个数依次与后面的每个数进行比较
pointer research_openhash(keytype K,openhash HP)
{ i=H(K); /*计算K的散列地址*/
p=HP[i]; /*i的同义词子表表头指针传给P*/
while(______)p=p—>next; /*未达到表尾且未找到时,继续扫描*/
______;
}
设一棵二叉树的结点结构为(LLINK,INFO,RLINK),ROOT为指向该二叉树根结点的指针,p和g分别为指向该二叉树中任意两个结点的指针,试编写一算法ANCESTOR(RDOT,p,q,r),该算法找到p和q的最近共同祖先结点r。【吉林大学2000二、3(12分)】【中山大学1994六(15分)】
假设以带双亲指针的二叉链表作为-二叉树的存储结构,其结点结构的类型说明如下所示:
typedef char DataType;
typedef struct node{
DataType data;
struct node*lchild,*rchild; //左右孩子指针
struct node*parent; //指向双亲的指针
}BinTNode;
typedef BinTNode*BinTree;
若px为指向非空二叉树中某个结点的指针,可借助该结构求得px所指结点在二叉树的中序序列中的后继。
1. 就后继的不同情况,简要叙述实现求后继操作的方法;
B、若p无左子女且有右子女,则其前序下的后继为p的布子女
C、若p既无左子女又无右子女,则其前序下的后继为p的右线索所指结点
D、若p无左子女,从结点p开始,追踪rightChild链,直到rightChild不是线索,则这时rightChild(不为NULL的话)所指结点为其前序下的后继