void PreOrder(BTNode *b){
BTNode *St[MAXSize],*p;
int top=-1;
if(b!=NULL){
top++; //根节点入栈
St[top]=b;
while(top>-1){ //栈不为空时循环
p=St[top]; //退栈并访问该节点
top--;
printf("%c",p->data);
if(p->rchild!=NULL){ //右孩子节点入栈
top++;
St[top]=p->rchild;
}
if(p->lchild!=NULL){ //左孩子节点入栈
top++;
St[top]=p->lchild;
}
}
}
}
先序遍历二叉树即先访问根节点,然后访问左子树,最后访问右子树;因此可先将根节点入栈,在栈不为空时循环,将p出栈,若他有右孩子则将其入栈,若他有左孩子再将其入栈,这样便可非递归地遍历二叉树。