二叉树——二叉树的遍历

来源:互联网 发布:淘宝品牌男装店 编辑:程序博客网 时间:2024/06/07 03:30

本题要求给定二叉树的4种遍历。

函数接口定义:

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("\n");    printf("Preorder:");   PreorderTraversal(BT);   printf("\n");    printf("Postorder:");  PostorderTraversal(BT);  printf("\n");    printf("Levelorder:"); LevelorderTraversal(BT); printf("\n");    return 0;}/* 你的代码将被嵌在这里 */

输出样例(对于图中给出的树):

Inorder: D B E F A G H C IPreorder: A B D F E C G H IPostorder: D E F B H G I C ALevelorder: A B C D F G I E H

int GetHeight(BinTree BT)//求二叉树高度、深度{    int m = 0,n = 0;    if(BT == NULL)    {        return 0;    }    else    {        m = GetHeight(BT -> Left);        n = GetHeight(BT -> Right);        if(m > n)            return m + 1;        return n + 1;    }}void InorderTraversal(BinTree BT)//中序遍历{    if(BT)    {        InorderTraversal(BT -> Left);        printf(" %c",BT -> Data);        InorderTraversal(BT -> Right);    }}void PreorderTraversal(BinTree BT)//先序遍历{    if(BT)    {        printf(" %c",BT -> Data);        PreorderTraversal(BT -> Left);        PreorderTraversal(BT -> Right);    }}void PostorderTraversal(BinTree BT)//后序遍历{    if(BT)    {        PostorderTraversal(BT -> Left);        PostorderTraversal(BT ->Right);        printf(" %c",BT -> Data);    }}//数组模拟队列void LevelorderTraversal(BinTree BT)//层次遍历非递归写法{    if(BT)    {        BinTree T[100];        BinTree tmp;        int i = 0,j;        T[j++] = BT;        while(i<j)        {            tmp = T[i++];//队头出队            printf(" %c",tmp -> Data);            if(tmp->Left)//若左子树非空            {                T[j++] = tmp -> Left;            }            if(tmp -> Right)//右子树非空            {                T[j++] = tmp -> Right;            }        }    }}//递归写法void PrintLevel(BinTree BT,int level){    if(!BT)        return ;//空树    if(level == 1)    {        printf(" %c",BT -> Data);    }    PrintLevel(BT -> Left, level - 1);    PrintLevel(BT -> Right,level - 1);}void LevelorderTraversal(BinTree BT){    if(!BT)        return ;    int height = GetHeight(BT);    for(int i  = 1; i <= height; i++)    {        PrintLevel(BT,i);    }}



原创粉丝点击