二叉树的基本操作(非递归)

来源:互联网 发布:莅阳长公主知乎 编辑:程序博客网 时间:2024/06/06 03:55
#include <stdio.h>#include <stdlib.h>#define MAXSIZE 20typedef struct node{    char data;    node * lchild;    node * rchild;}BTree;typedef struct{    BTree * data[MAXSIZE];    int top;}SeqStack;BTree * create(BTree * p){    char ch;    scanf("%c",&ch);    if(ch != ' '){        p = (BTree *)malloc(sizeof(BTree));        p->data = ch;        p->lchild = create(p->lchild);        p->rchild = create(p->rchild);        return p;    }else{        return NULL;    }}void preorder(BTree * p,SeqStack * s){    while(p != NULL || s->top > -1){        if(p!=NULL){            s->top++;            printf("%4c",p->data);            s->data[s->top] = p;            p = p->lchild;        }else{            p = s->data[s->top];            s->top--;            p = p->rchild;        }    }}void inorder(BTree * p,SeqStack * s){    while(p != NULL || s->top != -1){        while(p!=NULL){            s->top++;            s->data[s->top] = p;            p = p->lchild;        }        if(s->top != -1){            p = s->data[s->top];            printf("%4c",p->data);            s->top--;            p = p->rchild;        }    }   }void postorder(BTree * p,SeqStack * s){    BTree * visited = NULL;    while(p != NULL || s->top > -1){        while(p != NULL){            s->top++;            s->data[s->top] = p;            p = p->lchild;        }        p = s->data[s->top];        if(p->rchild == NULL || p->rchild == visited){            printf("%4c",p->data);            visited = p;            s->top--;            p = NULL;        }else{            p = p->rchild;        }    }}int main(){    SeqStack * s = (SeqStack *)malloc(sizeof(SeqStack));    s->top = -1;    BTree * p;    p = create(p);    printf("preorder:\n");    preorder(p,s);    printf("\n");    printf("inorder:\n");    inorder(p,s);    printf("\n");    printf("postorder:\n");    postorder(p,s);    printf("\n");    return 0;}
0 0