【中序非递归遍历算法】
遇到一个节点,就把它压栈,并去遍历它的左子树;
当左子树遍历结束后,从栈顶弹出这个节点并访问它;
然后按其右指针再去中序遍历该节点的右子树;
/* 中序非递归遍历算法 */
void InOrderTraversal(BinTree BT)
{
/* T为二叉树 */
BinTree T=BT;
Stack S=CreatStack(MAXSIZE);//创建并初始化堆栈S
while(T||!IsEmpty(S)){
while(T){ //一直向左并将沿途节点压入栈
Push(S,T);
T=T->Left;
}
if(!IsEmpty(S)){
T=Pop(S);//节点弹出栈
printf("%5d ",T->Data);//访问节点
T=T->Right;//转向右子树
}
}
}
网友评论