数据结构作业答案 张绍武.doc
上传人:sy****28 上传时间:2024-09-14 格式:DOC 页数:6 大小:348KB 金币:18 举报 版权申诉
预览加载中,请您耐心等待几秒...

数据结构作业答案 张绍武.doc

数据结构作业答案张绍武.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

18 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

设计一个非递归算法,从一棵二叉树中查找出所有结点的最大值并返回。答:intInorderTraverse(BiTreeT,void(*visit)(TelemTypee)){intmax=0;InitStack(S);p=T;while(p||!StackEmpty(S)){if(p){Push(S,p);p=p->lchild;}//向左下走到头else{Pop(S,p);visit(t->data);if((t->data)>max)max=t->data;p=p->rchild;//向右走一步}//else}//whilereturnmax;}设树采用定长结点的多重链表表示,设计算法实现树的按层次遍历。答:typedefstructCSTNode{chardata;structCSTNode*childone,*childtwo,*childthree;}CSTNode,*CSTree;voidLevelOrderTraverse(CSTreeT){CSTreep=T;SqQueueQ;if(!T)return;InitQueue(Q);EnQueue(Q,p);while(!QueueEmpty(Q)){DeQueue(Q,p);printf("%c",p->data);if(p->childone)EnQueue(Q,p->childone);if(p->childtwo)EnQueue(Q,p->childtwo);if(p->childthree)EnQueue(Q,p->childthree);}}阅读下列算法,若有错,改正之。BiTreeInSucc(BiTreeq){//已知q是指向中序线索二叉树上某个结点的指针,//本函数返回指向*q的后继的指针。r=q->rchild;if(!r->rtag)while(!r->rtag)r=r->rchild;returnr;}答:共3处错误BiTreeInSucc(BiTreeq){//已知q是指向中序线索二叉树上某个结点的指针,//本函数返回指向*q的后继的指针。r=q->rchild;if(!r->rtag)while(!r->ltag)r=r->lchild;returnr->lchild;}写出二叉树的先序遍历和后序遍历的非递归算法。答:先序遍历非递归算法voidPreOrderTraverse(BiTreeT){SqStackS;InitStack(S);BiTree*p=T;while(p!=NULL||!StackEmpty(S)){while(p!=NULL)//遍历左子树{visit(T->data);Push(s,p);p=p->lchild;}if(!StackEmpty(s))//通过下一次循环中HYPERLINK"http://hi.baidu.com/数据结构课程"的内嵌while实现右子树遍历{Pop(S,p);p=p->rchild;}//endif}//endwhile}后序遍历非递归算法typedefenum{L,R}tagtype;typedefstruct{BiTreeptr;tagtypetag;}stacknode;typedefstruct{stacknodeElem[maxsize];inttop;}SqStack;voidPostOrderTraverse(BiTreeT){SqStackS;stacknodex;InitStack(S);p=T;do{while(p!=null)//遍历左子树{x.ptr=p;x.tag=L;//标记为左子树push(S,x);p=p->lchild;}while(!StackEmpty(S)&&S.Elem[S.top].tag==R){x=Pop(S);p=x.ptr;visit(p->data);//tag为R,表示右子树访问完毕,故访问根结点}if(!StackEmpty(S)){S.Elem[S.top].tag=R;//遍历右子树p=S.Elem[s.top].ptr->rchild;}}while(!StackEmpty(S));}设计一个非递归算法,计算树的叶子结点数。(要求说明树的存储方式)答:设树的存储方式为孩子兄弟链表typedefstructCSTNode{chardata;structCSTNode*firstchild,*nextsibling;}CSTNode,*CSTree;voidGetnum(CSTNode*t,int*n,int*m)//n是叶子节点数,m是非叶子结点数//其中n,m的初值为零{C