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

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

2015-11-14 20:50 337 查看


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



Time Limit: 1000MS Memory limit: 65536K


题目描述

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


输入

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


输出

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


示例输入

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



示例输出

dfg
uli


#include <iostream>
#include <cstdio>
#include <queue>
#include <cstdlib>
using namespace std;
struct node
{
char data;
struct node *lchild,*rchild;
};
struct node *root;
char st[51];
int cnt;

struct node *BuidTree()
{
struct node *root;
if(st[cnt++] == ',')
root = NULL;
else
{
root = (struct node *)malloc(sizeof(struct node));
root->data = st[cnt - 1];
root->lchild = BuidTree();   //建左子树
root->rchild = BuidTree();   //建右子树
}
return root;
}

void LeafIssue(struct node *root)
{
queue<node *>s;
s.push(root);

while(!s.empty())
{
root = s.front();  // 访问队首元素,
s.pop();           // 删除队首
if(root)
{
if((root->rchild==NULL) && (root->lchild==NULL))
{
printf("%c",root->data);      // 如果是叶子结点则输出
}
s.push(root->lchild);       //左右子树一次入队
s.push(root->rchild);
}
}
}

int main()
{
while(~scanf("%s",st))
{
cnt = 0;
root = BuidTree();
LeafIssue(root);
cout<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: