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