树的先中后序非递归算法

来源:互联网 发布:淘宝自己的评论怎么看 编辑:程序博客网 时间:2024/06/16 18:01

typedef struct BiTNode{ char data; struct BiTNode *lchild, *rchild;}BiTNode, *BiTree

 //先序遍历非递归void PreOrderTraverse(BiTree T){ Stack s; if(!T) {   printf("Empty Tree.\n");   return; } BiTree p=T; while(p||!s.empty()) {     while(p)   {     s.push(p);     printf("%c",p->data);     p=p->lchild;    }     if(!s.empty())    {      p=s.top();     p=p->rchild;      s.pop();    }  }}//中序遍历非递归void InOrderTraverse(BiTree T){   Stack s;   if(!T)  {    printf("Empty Tree\n");    return; } 
  BiTree p=T;   while(p||!s.empty())  {    while(p)   {     s.push(p);    p=p->lchild;   }   if(!s.empty()) {    p=s.top();    printf("%c",p->data);   s.pop() p=p->rchild; } }}//后序遍历非递归//需要增加一个访问标志位void postOrderTraverse(BiTree T){    Stack s;    flag[20];//访问标志位    if(!T)   {     printf("Empty Tree\n");     return;   }    while(p||!s.empty())   {      while(p)    {      s.push(p);     p=p->lchild;     flag[s.size()]=0;    }      while(!s.empty()&&flag[s.size()]==1)    {       p=s.top();       printf("%c",p->data);       s.pop();     }     if(!s.empty)    {       p=s.top();      p=p->rchild;      flag[s.size()]=1;    }    else    {       break;    }   }}