王道二叉树例题p141综合4
4.试给出二叉树的自下而上、从左到右的遍历算法
思路:队列与栈的结合。将队列一层中的节点出队并将其压入栈中,栈按层弹出节点,并每次出队时将当前节点的左右孩子插入队尾。
void ImLayerOrder(BiTree T){
Queue seq;
SqStack s;
seq = InitQueue();
InitStack(s);
BiTree tmp;
tmp = T;
int ytag = 1; //记录队列中原有节点的个数
int tag = 0; //记录队列新插入节点的个数
PushQueue(&seq, tmp);
while(!IsEmptyQueue(seq)) {
while(ytag > 0){
if (tmp->LChild != NULL) {
PushQueue(&seq, tmp->LChild);
tag++;
}
if (tmp->RChild != NULL) {
PushQueue(&seq, tmp->RChild);
tag++;
}
ytag--;
Push(&s,tmp);
PopQueue(&seq, &tmp);
}
ytag = tag;
tag = 0;
while(StackEmpty(s)==0){ //将栈中节点弹出
BiTree tmp2;
tmp2 = Pop(&s);
printf("%c",tmp2->data);
}
}
}