您的位置:首页 > 其它

二叉树深度优先遍历的非递归算法

2011-09-04 23:49 253 查看
void PreOrder(BiTree T)
{ // 基于方法一,流程图如右,当型循环

InitStack(S);

while ( T!=NULL || !StackEmpty(S))

{

while ( T != NULL )

{

Visit(T->data) ;

Push(S,T);

T = T->lchild;

}

if( !StackEmpty(S) )

{

Pop(S,T);

T = T->rchild;

}

}

}

void InOrder(BiTree T)

{ // 流程图如右,当型循环

InitStack(S);

while ( T!=NULL || !StackEmpty(S) )

{

while ( T != NULL )

{

Push(S,T);

T = T->lchild;

}

if( !StackEmpty(S) )

{

Pop(S, T);

Visit(T->data);

T = T->rchild;

}

}

}

void PostOrder(BiTree T)

{ // 流程图如右,当型循环

InitStack(S);

while ( T!=NULL || !StackEmpty(S) )

{

while ( T != NULL )

{

Push(S,T,0);

T = T->lchild;

}

while ( !StackEmpty(S) && GetTopTag(S)==1)

{

Pop(S, T);

Visit(T->data);

}

if ( !StackEmpty(S) )

{

SetTopTag(S, 1); // 设置栈顶标记

T = GetTopPointer(S); // 取栈顶保存的指针

T = T->rchild;

}

else

break;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: