• 数据结构(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 
    #include 
    
    // 创建结构体
    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);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65

    运行结果

    在这里插入图片描述

  • 相关阅读:
    商业园区的万能管理法,还怪高级的咧!
    cmd基本命令
    MATLAB函数:filtfilt——零相位数字滤波
    界面控件DevExtreme DateRangeBox组件发布,支持日期范围选择!
    前端笔记(9) Vue3 async await 循环调接口使用案例
    【NodeJs篇】npm和包
    HDMI协议介绍(五)--Audio
    聊一聊 C# 的线程本地存储TLS到底是什么
    【Java进阶篇】第五章 集合(上)--Collection集合
    【阿里云】轻松玩转linux服务器
  • 原文地址:https://blog.csdn.net/MateSnake/article/details/134540037