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);
    
    }
    
  • 相关阅读:
    字符串的操作
    10.20 整理1
    if else; while; break;continue ----流程控制系列
    10.19 重新打了第一天的代码(课件))
    10.17
    svn,导入数据到版本库及使用工作副本
    mysql的反引号backtick
    css中的1px并不等于设备的1px
    onclick事件属性与在用js绑定onclick事件中的this的区别
    一次对CI框架update方法底层实现的探索之旅
  • 原文地址:https://www.cnblogs.com/vocaloid01/p/9514216.html
Copyright © 2011-2022 走看看