4.链式二叉树_静态_遍历

来源:互联网 发布:南风知我意2 全文阅读 编辑:程序博客网 时间:2024/04/28 21:03
/* *      静态创建链式二叉树 先中后遍历 * */#include <stdio.h>#include <stdlib.h>typedef struct Btnode {        char data;              //数据        struct Btnode* plchild; //左子树        struct Btnode* prchild; //右子树} BTNODE;BTNODE* create_btree();void pre_traverse_btree(BTNODE* pt);      //创建二叉树void in_traverse_btree(BTNODE* pt);       //先序遍历void post_traverse_btree(BTNODE* pt);     //后序遍历int main(){        BTNODE* pT = create_btree();        printf("先序遍历:\n");        pre_traverse_btree(pT);         //先序遍历        printf("\n\n");        printf("中序遍历:\n");        in_traverse_btree(pT);          //中序遍历        printf("\n\n");        printf("后序遍历:\n");        post_traverse_btree(pT);        //后序遍历        printf("\n");        return 0;}/*创建二叉树*/BTNODE* create_btree(){        BTNODE* pa = (BTNODE*)malloc(sizeof(BTNODE));        BTNODE* pb = (BTNODE*)malloc(sizeof(BTNODE));        BTNODE* pc = (BTNODE*)malloc(sizeof(BTNODE));        BTNODE* pd = (BTNODE*)malloc(sizeof(BTNODE));        BTNODE* pe = (BTNODE*)malloc(sizeof(BTNODE));                pa->data = 'A';        pb->data = 'B';        pc->data = 'C';        pd->data = 'D';        pe->data = 'E';        pa->plchild = pb;        pa->prchild = pc;        pb->plchild = pb->prchild = NULL;        pc->plchild = pd;        pc->prchild = NULL;        pd->plchild = NULL;        pd->prchild = pe;        pe->plchild = pe->prchild = NULL;        return pa;}/*先序遍历*/void pre_traverse_btree(BTNODE* pt){        if (pt) {                /*遍历根*/                printf(" -> ");                printf("%c", pt->data);                /*遍历左子树*/                if (pt->plchild)                        pre_traverse_btree(pt->plchild);                                /*遍历右子树*/                if (pt->prchild)                        pre_traverse_btree(pt->prchild);        }}/*中序遍历*/void in_traverse_btree(BTNODE* pt){          if (pt) {                /*遍历左子树*/                if (pt->plchild)                        in_traverse_btree(pt->plchild);                                /*遍历根*/                printf(" -> ");                printf("%c", pt->data);                /*遍历右子树*/                if (pt->prchild)                        in_traverse_btree(pt->prchild);        }        }/*后序遍历*/void post_traverse_btree(BTNODE* pt){        if (pt) {                /*遍历左子树*/                if (pt->plchild)                        post_traverse_btree(pt->plchild);                /*遍历右子树*/                if (pt->prchild)                        post_traverse_btree(pt->prchild);                /*遍历根*/                printf(" -> ");                printf("%c", pt->data);        }}