树的先中后序非递归算法
来源:互联网 发布:淘宝自己的评论怎么看 编辑:程序博客网 时间: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; } }}