问答题 试给出二叉树的自下而上、自右而左的层次遍历算法。【吉林大学2001年】
【正确答案】正确答案:算法的基本设计思想:借助队列和栈,先使用队列实现自上而下、自左而右的遍历。最后弹出栈中元素实现对二叉树按自下而上、自右而左的层次遍历。算法的代码: VOid InvertLevel(BiTree bt) { //对二叉树按自下而上、自右而左的进行层次遍历 if(bt!=NULL) { StackInit(s); //栈初始化,栈中存放二叉树结点的指针 QueueInit(Q); //队列初始化,队列中存放二叉树结点的指针 QueueIn(Q,bt); while(!QueueEmpty(Q)) { //自上而下层次遍历 p=QueueOut(Q); //出队 push(S,p), //入栈 if(p->ichild) //若左子女不空,则入队列 QueueIn(Q,P一>1chiid); if(p->rchild) //若右子女不空,则入队列 QueueIn(Q,P一>rchiid); } while(!StackEmpty(S)) { //自下而上、自右而左的层次遍历 P=pop(S); printf(“%d”,P一>data); } }//if(bt!=NULL) }//InvertLevel
【答案解析】