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

/*
 *      静态创建链式二叉树 先中后遍历
 * */

#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);
        }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值