zoukankan      html  css  js  c++  java
  • 二叉树的四种遍历

    函数接口定义:

    void InorderTraversal( BinTree BT );
    void PreorderTraversal( BinTree BT );
    void PostorderTraversal( BinTree BT );
    void LevelorderTraversal( BinTree BT );

    其中BinTree结构定义如下:

    typedef struct TNode *Position;
    typedef Position BinTree;
    struct TNode{
        ElementType Data;
        BinTree Left;
        BinTree Right;
    };

    要求4个函数分别按照访问顺序打印出结点的内容,格式为一个空格跟着一个字符。
    裁判测试程序样例:

    #include <stdio.h>
    #include <stdlib.h>
    
    typedef char ElementType;
    typedef struct TNode *Position;
    typedef Position BinTree;
    struct TNode{
        ElementType Data;
        BinTree Left;
        BinTree Right;
    };
    
    BinTree CreatBinTree(); /* 实现细节忽略 */
    void InorderTraversal( BinTree BT );
    void PreorderTraversal( BinTree BT );
    void PostorderTraversal( BinTree BT );
    void LevelorderTraversal( BinTree BT );
    
    int main()
    {
        BinTree BT = CreatBinTree();
        printf("Inorder:");    InorderTraversal(BT);    printf("
    ");
        printf("Preorder:");   PreorderTraversal(BT);   printf("
    ");
        printf("Postorder:");  PostorderTraversal(BT);  printf("
    ");
        printf("Levelorder:"); LevelorderTraversal(BT); printf("
    ");
        return 0;
    }
    /* 你的代码将被嵌在这里 */

    输出样例(对于图中给出的树):
    这里写图片描述

    Inorder: D B E F A G H C I
    Preorder: A B D F E C G H I
    Postorder: D E F B H G I C A
    Levelorder: A B C D F G I E H

    思路:
    二叉树的中,前,后,顺序遍历。
    代码:

    void LevelorderTraversal( BinTree BT )
    {
        if(BT == NULL)return;
        struct TNode *queue[2000];
        int head,tail;
        head = tail = 0;
        queue[tail++] = BT;
        while(head!=tail)
        {
            printf(" %c",queue[head]->Data);
            if(queue[head]->Left!=NULL)queue[tail++] = queue[head]->Left;
            if(queue[head]->Right!=NULL)queue[tail++] = queue[head]->Right;
            head++;
        }
    }
    
    void InorderTraversal( BinTree BT )
    {
        if(BT == NULL)return ;
    
        InorderTraversal(BT->Left);
        printf(" %c",BT->Data);
        InorderTraversal(BT->Right);
    
    }
    
    void PreorderTraversal( BinTree BT )
    {
        if(BT == NULL)return ;
    
        printf(" %c",BT->Data);
        PreorderTraversal(BT->Left);
        PreorderTraversal(BT->Right);
    
    }
    
    void PostorderTraversal( BinTree BT )
    {
        if(BT == NULL)return ;
    
        PostorderTraversal(BT->Left);
        PostorderTraversal(BT->Right);
        printf(" %c",BT->Data);
    
    }
    
  • 相关阅读:
    MyEclipse持续性开发教程:用JPA和Spring管理数据(三)
    DevExpress v17.2新版亮点—DevExtreme篇(三)
    MyEclipse持续性开发教程:用JPA和Spring管理数据(二)
    DevExpress v17.2新版亮点—DevExtreme篇(二)
    多线程(1)
    什么是SpringCloud?
    WebStrom常用快捷键
    七、CommonJS规范和Note.js模块概念的介绍
    六、Note开发工具Visual Studio Code下载安装以及Visual Studio Code的使用
    JSP标签
  • 原文地址:https://www.cnblogs.com/vocaloid01/p/9514216.html
Copyright © 2011-2022 走看看