- #include<stdio.h>
- #include<malloc.h>
-
- typedef struct binode{
- char data;
- struct binode *lchild;
- struct binode *rchild;
- }BiNode,*BiTree;
-
-
-
-
- void create(BiTree t){
- char ch=(char)getchar();
- if(ch=='#'){
- t->data='#';
- t->lchild=NULL;
- t->rchild=NULL;
- }
- else{
- t->data=ch;
- t->lchild=(BiTree)malloc(sizeof(BiNode));
- create(t->lchild);
- t->rchild=(BiTree)malloc(sizeof(BiNode));
- create(t->rchild);
- }
- }
-
- void preTraverse(BiTree t){
- BiTree p=t;
- BiTree stack[20];
- int top=0;
- while(top>=0){
- while(p->data!='#'){
- printf("%c ",p->data);
- stack[top++]=p;
- p=p->lchild;
- }
- if(top>0)
- p=stack[--top]->rchild;
- else
- top=-1;
-
- }
- }
-
- void midTraverse(BiTree t){
- BiTree p=t;
- BiTree stack[20];
- int top=0;
- while(top>=0){
- while(p->data!='#'){
- stack[top++]=p;
- p=p->lchild;
- }
- if(top>0){
- p=stack[--top];
- printf("%c ",p->data);
- p=p->rchild;
- }else
- top=-1;
- }
- }
-
- void afeTraverse(BiTree t){
- BiTree p=t,q=t;
- BiTree stack[20];
- int top=0;
- while(top>=0){
- while(p->data!='#'){
- stack[top++]=p;
- p=p->lchild;
- }
- if(q->rchild==p){
- printf("%c ",q->data);
- q->data='#';
- --top;
- }
- if(top>0){
- p=stack[top-1];
- q=p;
- p=p->rchild;
-
- }
- }
- }
-
- int main(){
- BiTree root=(BiTree)malloc(sizeof(BiNode));
- create(root);
- afeTraverse(root);
- printf("\n");
- return 1;
- }
posted @
2012-07-22 21:39
springbarley
阅读(
149)
评论()
收藏
举报