
void NRPreOrder(BiTree bt)
{/*非递归先序遍历二叉树*/
BiTree stack[MAXNODE],p;
int top;
if ( bt==NULL ) return;
top=0;
p=bt;
while ( ! ( p==NULL&&top==0 ) )
{
while ( p!=NULL )
{
Visite ( p->data ); /*访问结点的数据域*/
if ( top<MAXNODE-1 ) /*将当前指针p 压栈*/
{
stack[top]=p;
top++;
}
else
{
printf ( “栈溢出” ) ;
return;
}
p=p->lchild; /*指针指向p 的左孩子*/
}
if ( top<=0 ) return; /*栈空时结束*/
else
{
top--;
p=stack[top]; /*从栈中弹出栈顶元素*/
p=p->rchild; /*指针指向p 的右孩子结点*/
}
}
}



