voidNRPreOrder(BiTree bt){
BiTNode *stack[MAXNODE],p;int top =-1;if(bt ==NULL)return;
p =bt;//指针p为空且栈也为空时结束while(!(p ==NULL&& top ==-1)){while(p!=NULL){//访问根结点Visit(p);//入栈
top++;
stack[top]= p;//向左走
p = p->lchild;}if(top <0)return;else{//出栈
p = stack[top];
top--;//向右走
p = p->rchild;}}}
后序遍历
voidNRPostOrder(BiTree bt){
BiTNode *stack[MAXNODE],p;int top =-1;if(bt ==NULL)return;
p =bt;//指针p为空且栈也为空时结束while(!(p ==NULL&& top ==-1)){while(p!=NULL){//入栈
top++;
stack[top]= p;//向左走
p = p->lchild;}//栈不空if(top >-1)if(stack[top]>0)//第一次在栈中{
p = stack[top]->rchild;//向右走
stack[top]=-stack[top];//相当于第一次出栈,第二次进栈}else{//第二次在栈中
p =-stack[top];
top--;//出栈,访问Visit(p);
p =NULL;}}}