SDUT OJ 数据结构实验之二叉树五:层序遍历

来源:互联网 发布:杭州淘宝代运营 编辑:程序博客网 时间:2024/05/17 09:44

数据结构实验之二叉树五:层序遍历 

Time Limit: 1000MS Memory limit: 65536K 

题目描述

已知一个按先序输入的字符序列,如abd,,eg,,,cf,,,(其中,表示空结点)。请建立二叉树并求二叉树的层次遍历序列。

输入

 输入数据有多行,第一行是一个整数t (t<1000),代表有t行测试数据。每行是一个长度小于50个字符的字符串。

输出

 输出二叉树的层次遍历序列。

示例输入

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

示例输出

abcdefgxnuli



#include <stdio.h>#include <stdlib.h>#include <iostream>#include <queue>using namespace std;struct node{    char data;    struct node *l,*r;};struct node *root;char st[51];int cnt;struct node *creat(){    struct node *root;    if(st[cnt++] == ',')        root = NULL;    else    {        root = (struct node *)malloc(sizeof(struct node));        root->data = st[cnt - 1];        root->l = creat();        root->r = creat();    }    return root;}void cengci(struct node *root){    queue<node *>s;    if(root)    {        cout<<root->data;        s.push(root);     //输出根结点,并入队    }    while(!s.empty())    {        root = s.front(); // 访问队首,并删除(也就是第一个头根)        s.pop();        if(root->l)        {            printf("%c",root->l->data);  // 从此头跟的左子树,依次输出            s.push(root->l);        }        if(root->r)        {            printf("%c",root->r->data);  // 从此头跟的右子树,依次输出            s.push(root->r);        }    }}int main(){    int t;    scanf("%d",&t);    while(t--)    {        cnt = 0;        scanf("%s",st);        root = creat();        cengci(root);        cout<<endl;    }    return 0;}


0 0
原创粉丝点击