树的层次遍历
树的层次遍历:
从上到下,从左至右。
现改为:自下而上、自右向左的层次遍历:
思路:
在原来层次遍历的基础上,借助于栈,在每一个节点出队,并将其左右节点入队后,将该节点入栈。等所有元素全部出队入栈后,再依次访问栈中元素。
前提:采用二叉链表存储结构
void LevelOrder2(BiTree T){
InitQueue(Q); InitStack(S);
BiTree p=T;
//队头入队
EnQueue(Q,p);
while( p || !IsEmpty(Q)){
DeQueue(Q,p);//出队
Push(S,p); //入栈
if(p->lchild){
EnQueue(Q,p->lchild);
}
if(p->rchild){
EnQueue(Q,p->rchild);
}
//最后遍历栈中元素
while(!IsEmpty(S)){
Pop(S,p);visit(p);
}
}