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 的右孩子结点*/ |
} |
} |
} |