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

来源:互联网 发布:自己实现数据库 编辑:程序博客网 时间:2024/05/29 08:15

Problem Description

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

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

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

abd,,eg,,,cf,,,
xnl,,i,,u,,
Example Output

dfg
uli

因为要求输出叶子的顺序是从上到下,从左到右。所以需要层序遍历来存储每一个元素,再判断如果是叶子则输出。

#include <stdio.h>#include <stdlib.h>#include <iostream>#include <string.h>using namespace std;typedef char telemtype;typedef struct Binode{    telemtype data;    struct Binode *lchild,*rchild;} Binode,*Bitree;char s[60];int i;Bitree creat(Bitree &T){    if(s[i++]==',')        return NULL;    else    {        T=new Binode;        T->data=s[i-1];        T->lchild=creat(T->lchild);        T->rchild=creat(T->rchild);    }    return T;}void found(Bitree T){    int i=0;    int j=0;    Bitree a[60];    a[j++]=T;//先把最开始的根存入    while(i<j)    {        if(a[i])        {            if(!a[i]->lchild&&!a[i]->rchild)//如果a[i]是叶子则输出                cout<<a[i]->data;            if(a[i]->lchild)                a[j++]=a[i]->lchild;//不管是不是叶子都要存入此元素的左孩子和右孩子            if(a[i]->rchild)                a[j++]=a[i]->rchild;        }        i++;    }}int main(){    while(cin>>s)    {        i=0;        Bitree T;        T=creat(T);        found(T);        cout<<endl;    }}
阅读全文
0 0