算法思想:根据层次遍历的顺序可得到与该问题相反的次序,则可利用栈先进后出的性质,按层次遍历输出各结点并压入栈中,出栈时访问结点即可得到从下至上从右边到左边的遍历算法
代码:
void LeverOrder(BiTree T){
BiTree p;//定义一个指向二叉树的指针
InitQueue(Q);//初始化一个队列
InitStack(S);//初始化一个栈
EnQueue(Q,T);//根结点入队
while(!IsEmpty Q){//如果队列非空
DeQueue(Q,p);//队头结点出队
Push(S,p);//出队元素入栈
if(p->lchild!=NULL)//如果左子树非空
EnQueue(Q,p->lchild);//左子树根结点入队
if(p->rchild!=NULL)//如果右子树非空
EnQueue(Q,p->rchild);//右子树根结点入队
}
if(!IsEmpty S){//如果栈非空
Pop(S,p);//弹出栈顶元素
visit(p);//遍历
}
}