数据结构(c语言版) 树的遍历

作业要求

以如下图为例,完成树的遍历:
1、利用孩子兄弟表示法的存储结构
2、利用先根序列创建树
3、先根遍历树
4、后根遍历树
在这里插入图片描述

思考

预期的结果应该为:

1、先根创建树时需要输入的数据为:

A B E 0 F 0 0 C 0 D G 0 0 0 0

2、先根遍历的输出结果为:

A B E F C D G

3、后根遍历的输出结果为:

E F B C G D A

代码实现

#include <stdio.h>
#include <malloc.h>

// 创建结构体
struct TreeNode{
    char data;
    struct TreeNode *firstchild;
    struct TreeNode *nextsibling;
};

//先根创建孩子兄弟链表
void CreatTree(struct TreeNode **T) {
    char ch;
    scanf("\n %c", &ch);
    if (ch == '0') {
        *T = NULL;
    }
    else {
        *T = (struct TreeNode *) malloc(sizeof(struct TreeNode));
        (*T)->data = ch;
        CreatTree(&((*T)->firstchild));         // 创建第一个孩子结点
        CreatTree(&((*T)->nextsibling));        // 创建右兄弟结点
    }
}

//先根遍历
void RootFirst(struct TreeNode *T){
    struct TreeNode *p;
    if(T!=NULL){
        printf("%3c",T->data);      //打印根结点
        p = T->firstchild;                  //指向根的第一个孩子结点
        while (p){
            RootFirst(p);
            p = p->nextsibling;            //指向下一个孩子结点,即当前结点的右兄弟结点
        }
    }
}

// 后根遍历
void RootLast(struct TreeNode *T){
    if (T != NULL) {
        struct TreeNode* Fchild = T->firstchild; //获取第一棵子树
        while (Fchild != NULL) {                //依次访问每一棵子树
            RootLast(Fchild);                  //后序访问子树
            Fchild = Fchild->nextsibling;     //访问另一棵子树
        }
        printf("%3c", T->data);      //访问根节点
    }

}

int main(){
    struct TreeNode *t;
    printf("***************先根创建树***************\n");
    printf("请输入结点树的数据:");
    CreatTree(&t);

    printf("***************先根遍历树***************\n");
    printf("先根遍历结点结果:");
    RootFirst(t);

    printf("\n***************后根遍历树***************\n");
    printf("后根遍历结点结果:");
    RootLast(t);
}

运行结果

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值