早教吧 育儿知识 作业答案 考试题库 百科 知识分享

写出下列算法的功能.StatusPreOrderTraverse(BiTreeT,Status(*Visit)(TelemType(e))){InitStack(S);Push(S,T);\x05While(!StackEmpty(Q))\x05{Pop(S,p);if(Visit(p->data))returnERROR;\x05if(p->rchild)Push(S,p->rchild);\x05if(p->lchild)Pu

题目详情
写出下列算法的功能.
Status PreOrderTraverse (BiTree T,Status (* Visit)(TelemType(e)))
{ InitStack(S);Push(S,T);
\x05While(!StackEmpty(Q))
\x05 {Pop(S,p);if(Visit(p->data)) return ERROR;
\x05 if(p->rchild) Push(S,p->rchild);
\x05 if(p->lchild) Push(S,p->lchild);
\x05 }
return OK;
▼优质解答
答案和解析
ListOp_N(LinkList list){//本算法功能是找出正整数单链表list中的最小值结点;
//并在此结点数值是奇数时,把它与其后继结点交换
//在此结点数值是偶数时,把其直接后继结点删除
q=list;
p=q;
while !q { //第一部分:找出最小值结点p,并打印p结点数值
if p->data>q->data p=q;
q=q->next;}//while
printf("%d",p->data);
if odd(p->data){ //第二部分:如果是奇数则交换,odd()是判奇函数
if !(p->next) {q=list; //重新确定p的位置及其前驱q
while ( q->next!=p ) q=q->next;
r=p->next; //引入临时变量r,用于保存p的后继q->next=r; //修改p的前驱p->next=r->next; //修改p的后继r->next=p; //修改r的后继
}//if
}
else{ //第三部分:如果是偶函数,则删除后继结点
if !(p->next) { r=p->next;
p->next=r->next; //改变p的后继指针
free(r); //删除p的原后继结点}//if
}//if
}// ListOp_N