2.下面代码创建前序线索二叉树。(10分)typedef struct binTreeNode{ char d; int ltag,rtag; struct binTreeNode *l,*r;
}Btree; /* 定义线索树结构 */ Btree *pre=NULL; /* 定义外部变量pre */
void Visit(Btree *p){ /*实现具体线索的创建*/ if (p->l==NULL) {
p->l=pre; ( 4 ) ; }} if (pre!=NULL &&& pre->r==NULL)){ ( 5 ) ; prre->rtag==1; } } voiid creaTThreadTree(Btreee *t){/*创建线索树树*/ Btree *L,*R; if (t==NULL) reeturn; L=t->l; R=t->r;; Visit(t); ( 6 ) ; creaThreadTree((L); creaThreadTree((R); } 三、综合解答题(每每小题10分,共计分50分) 1. 依次输输入键值{12,10,13,23,144,15,17,27,22,33},画出出其对应的二叉排序序树。(10分)分 2. 给定右图所示的的稀疏矩阵阵,写出其对对应的三元元组表示。(10分) 知某棵二叉叉树的后序遍历输出序序3. 已知列为:f、e、b、g、d、c、a;中序遍历输出序列列为:e、f、b、a、c、g、d;画出该树树的后序二叉叉穿线树。(10分) 4. S={15,10,25,23,45,35,17,27,22,33}依次按散列依列方式存入数组a[]中,其中散散列函数为为 H(key)==key%10,冲突处理的的方法是线线性探测再散列。将将下面数组a存储各元元素的位置示示意图填写写完整。(100分) 数组a 0 1 2 3 4 5 6 4 7 8 9 7 用Prim算法,针对右右图画出构构造最小生成成树的5. 使用过程图示示(10分) 四、算法设计题(每每小题10分,共分20分) 分10030101100150043602201、给定键键值按升序序排列的带头头结点的单单链表h1和h2,将其其合并成降降序排列的单链表,并返回新链链表的表头头指针。要求求利用原表表的结点数据据空间。 typedef struct L{
int d; struct L *next; }LinkL;
LinkL * mergeList(LinkL *h1,LinkL *h2){ /*补充完整 */ }
2、编写算法,返回二叉树中序遍历的最后一个结点; typedef struct pp{ int d;
struct pp *l,*r; }Btree;
Btree* InLastNode(Btree* bt){ /*补充完整 */ }
江江西师范大学计算算机科学学技术专业 09-10第1学期期《数据据结构》期期末考试试试题B 参考考答案 课程代号号:262208 注意事项项:请将答案案全部写到到答题纸上,,并注明题题号! 一、填空题(每小题题2分,共10分) 1. 终止止性/或有穷穷性 2. O(loogn) 3. (r+n-f) % n 4. +a*b-cd 55. |i-j||>b 二、程序填空(每小小题10分,共20分) (1). (LL+H)/2 (2).BS(a,key,L,,m-1); (3).BS(a,, key, mm+1, H);(4). p-->ltag=1; (55). pre-->r=p; (66). pre==t; 三、综合解答题(1 - 2题每题题5分,3 -- 5每题100分,共计40分) 1. 依次输输入键值{12,10,13,23,14,15,17,27,22,33},按照左左子树小于等于根,右子树大于于根的规则则,画出其对应的二二叉排序树。。(10分) 2. 给定稀稀疏矩阵,写出其对应应的三元组组表示。(10分) {(6,7,8), ((1,2,12), (1,,3,9), (3,1,-33), (3,6,14),, (4,3,24), (55,2,18), (66,1,15), (66,4,-7) } 注意:建建议无论是以以表格格式式,还是以元元素对格式式,都可以给给满分。另另外,基于从0开始始的下标刻画画上述矩阵阵,也算做正正确。 a3. 已知知某棵二叉树树的后序遍遍历输出序列列为:f、e、bcb、g、d、c、a;中中序遍历输输出序列为:e、f、b、a、c、g、d;画出该该树的后序序二叉穿线树树。(10分) efgd4. S={15,10,25,23,45,35,17,27,22,33}依次按散列方式存入数组a[]中,其中散列函数为 H(key)=key%10,冲突处理的方法是线性探测再散列。将下面数组a存储各元素的位置示意图填写完整。(10分)
0 1 2 3 4 5 6 7 8 9 数组a 10 27 22 23 33 15 25 45 35 17
100100
3045. 使用Prim算法,针对右图画出构造最小生成树的过1程图示(10分)
1023初始4110501020301020203
600131003010030104122412204124233343四、算法设计题(每小题10分,共20分)
1、给定键值按升序排列的带头结点的单链表h1和h2,将其合并成降序排列的单链表,并返回新链表的表头指针。要求利用原表的结点数据空间。 typedef struct L{
int d; struct L *next; }LinkL;
LinkL * mergeList(LinkL *h1,LinkL *h2){ LinkL *h,*q;
h=h1; h1=h1->next; h2=h2->next; h->next=NULL;
while (h1!=NULL && h2!=NULL){ if (h1->d <= h2->d)
{q=h1; h1=h1->next;} else
{q=h2; h2=h2->next;}
q->next=h->next; h->next=q; }
while(h1!=NULL){
q=h1; h1=h1->next;
q->next=h->next; h->next=q; }
while(h2!=NULL){
q=h2; h2=h2->next;
q->next=h->next; h->next=q; }
return h; }
2、编写算法,返回二叉树中序遍历的最后一个结点; typedef struct pp{ int d;
struct pp *l,*r; }Btree;
Btree* InLastNode(Btree* bt){ Btree* p;
if (bt==NULL) return; p=bt;
while (p->R!=NULL) p=p->R; return p; }