// 先序遍历的非递归实现
void pre_order(BinTree b)
{
InitStack(S);
while(b!=null||!IsEmpty(S))
{
if(b!=null)
{
visit(b);
Push(S,b);
b=b->lchild;
}
else
{
Pop(S,b);
b=b->rchild;
}
}
}
// 中序遍历的非递归实现
void in_order(BinTree b) //如果有左子树,先访问左子树
{
InitStack(S);
while(b!=null||!IsEmpty(S))
{
if(b!=null)
{
Push(S,b);
b=b->lchild;
}
else
{
Pop(S,b);
visit(s);
b=b->rchild;
}
}
}
// 后序遍历的非递归实现
void Post_order(BinTree b)
{
InitStack(S);
while(b!=null||!IsEmpty(S))
{
if(b!=null)
{
Push(S,b);
b=b->lchild;
}
else
{
Gettop(S,b); //访问栈顶元素
if(b->rchild&&b-rchild!=mark) //右子树存在且为访问的情况
{
b=b-rchild;
push(S,b); //将右子树入栈
b=b->lchild;
}
else
{
Pop(S,b);
visit(b-data);
mark=b;
b=NULL;
}
}
}
}
二叉树的非递归遍历
最新推荐文章于 2022-07-23 18:10:39 发布