数据结构实验之二叉树七:叶子问题
Time Limit: 1000MS Memory limit: 65536K
题目描述
已知一个按先序输入的字符序列,如abd,,eg,,,cf,,,(其中,表示空结点)。请建立该二叉树并按从上到下从左到右的顺序输出该二叉树的所有叶子结点。
输入
输入数据有多行,每一行是一个长度小于50个字符的字符串。
输出
按从上到下从左到右的顺序输出二叉树的叶子结点。
示例输入
abd,,eg,,,cf,,, xnl,,i,,u,,
示例输出
dfg uli
提示
输出叶子的时候要按顺序,所以要借助队列,在输出的时候判断一下,当左右叶子节点都为空时,说明此节点为叶子节点
#include <stdio.h>
#include <stdlib.h>
#include <queue>
using namespace std;
typedef char ElemType;
typedef struct BiTNode
{
ElemType data;
struct BiTNode *lchild,*rchild;
} BiTNode,*BiTree;
char a[100];
int i;
BiTree CreatBiTree()
{
BiTree T;
if (a[i++] == ',')
T = NULL;
else
{
T = (BiTree)malloc(sizeof (BiTNode));
if (!T)
return 0;
T->data = a[i-1];
T->lchild = CreatBiTree();
T->rchild = CreatBiTree();
}
return T;
}
void Leaf(BiTree T)
{
int s = 0,e = 0;
BiTree q[10000],p = T;
if (T == NULL)
return;
else
{
q[e++] = p;
while (s!=e)
{
p = q[s++];
if ((p->lchild==NULL)&&(p->rchild==NULL))
printf ("%c",p->data);
if (p->lchild!=NULL)
q[e++] = p->lchild;
if (p->rchild!=NULL)
q[e++] = p->rchild;
}
}
}
int main()
{
BiTree T;
while (gets(a)!=NULL)
{
i = 0;
T = CreatBiTree();
Leaf(T);
printf ("\n");
}
return 0;
}
本文介绍了一种根据先序遍历构建二叉树的方法,并通过队列实现了从上到下、从左到右输出所有叶子节点的功能。示例输入展示了如何构建二叉树,而输出则显示了正确获取的叶子节点。
413

被折叠的 条评论
为什么被折叠?



