您的位置:首页 > 理论基础 > 数据结构算法

数据结构实验之二叉树七:叶子问题

2016-08-11 22:03 316 查看

数据结构实验之二叉树七:叶子问题 *********************  

Time Limit: 1000MS Memory limit: 65536K

题目描述

已知一个按先序输入的字符序列,如abd,,eg,,,cf,,,(其中,表示空结点)。请建立该二叉树并按从上到下从左到右的顺序输出该二叉树的所有叶子结点。

输入

 输入数据有多行,每一行是一个长度小于50个字符的字符串。

输出

 按从上到下从左到右的顺序输出二叉树的叶子结点。

示例输入

abd,,eg,,,cf,,,
xnl,,i,,u,,


示例输出

dfg
uli


提示

层序遍历 

来源

 xam

示例程序

#include<stdio.h>

#include<stdlib.h>

#define MAXQSIZE 100

typedef int status;

typedef char TElemType;

 char ch[51];

status i;

typedef struct BiTNode

{

    char data;

    struct BiTNode *lchild,*rchild;

} BiTNode,*BiTree;

typedef BiTree QElemType;

typedef struct

{

    QElemType *base;

    int front;

    int rear;

} SqQueue;

status  InitQueue(SqQueue *Q)

{

    (*Q).base=(QElemType *)malloc(MAXQSIZE*sizeof(QElemType));

    if(!(*Q).base)

        exit (0);

    (*Q).front=(*Q).rear=0;

    return 1;

}

status QueueEmpty(SqQueue Q)

{

    if(Q.front==Q.rear)

        return 1;

    else

        return 0;

}

status EnQueue(SqQueue *Q,QElemType e)

{

    if(((*Q).rear+1)%MAXQSIZE==(*Q).front)

        return 0;

    (*Q).base[(*Q).rear]=e;

    (*Q).rear=((*Q).rear+1)%MAXQSIZE;

    return 1;

}

status DeQueue(SqQueue *Q,QElemType *e)

{

    if((*Q).front==(*Q).rear)

        return 0;

    *e=(*Q).base[(*Q).front];

    (*Q).front=((*Q).front+1)%MAXQSIZE;

    return 1;

}

void CreateBiTree(BiTree *T)

{

    i++;

    if(ch[i]==',')

        *T=NULL;

    else

    {

        *T=(BiTree)malloc(sizeof(BiTNode));

        if(!*T)

            exit (0);

        (*T)->data=ch[i];

        CreateBiTree(&(*T)->lchild);

        CreateBiTree(&(*T)->rchild);

    }

}

status visitT(char e)

{

    printf("%c",e);

    return 1;

}

void LevelOrderTraverse(BiTree T,status(*Visit)(char))

{

    SqQueue Q;

    BiTree P;

    InitQueue(&Q);

    if(T) EnQueue(&Q,T);

    while(Q.front != Q.rear)

    {

        DeQueue(&Q,&P);

  if(P->lchild==NULL&&P->rchild==NULL)

        Visit(P->data );

        if (P->lchild) EnQueue(&Q, P->lchild);

        if (P->rchild) EnQueue(&Q, P->rchild);

    }

   // return ;

}

int main()

{

    while(~scanf("%s",ch))

    {

       

        BiTree T;

        i=-1;

        CreateBiTree(&T);

        LevelOrderTraverse(T,visitT);

        printf("\n");

    }

    return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: