问题引入
【问题描述】按照先序遍历的顺序输出给定二叉树的叶结点。
【输入形式】以字符形式输入二叉树的结点序列
输入的字符序列为:ABC##DE#G##F###
【输出形式】输出二叉树中叶子结点的先序序列
【样例输入】
ABC##DE#G##F###【样例输出】
CGF【输出形式】输出二叉树中叶子结点的先序序列
【样例输入】
ABC##DE#G##F###【样例输出】
CGF
程序设计
#include<stdio.h>
#include<malloc.h>
#define MAX 20
typedef struct BTNode
{
char data ;
struct BTNode *lchild;
struct BTNode *rchild ;
}*BiTree;void createBiTree(BiTree *t); /*创建二叉树*/
void PreOrderPrintLeaf(BiTree p); /*先序遍历叶子结点*/
/*创建二叉树*/
void createBiTree(BiTree *t)
{
char s;
BiTree q;
s=getchar();
if(s=='#') /*子树为空则返回*/
{
*t=NULL;
return;
}
q=(BiTree)malloc(sizeof(struct BTNode));
if(q==NULL)
{
return;
}
q->data=s;
*t=q;
createBiTree(&q->lchild);/*递归建立左子树*/
createBiTree(&q->rchild);/*递归建立右子树*/
}/*createBiTree*//*先序遍历二叉树叶子结点*/
void PreOrderPrintLeaf(BiTree p){
if(p!=NULL){
if(p->lchild==NULL&&p->rchild==NULL){
printf("%c",p->data);
}
PreOrderPrintLeaf(p->lchild);
PreOrderPrintLeaf(p->rchild);
}
}int main()
{
BiTree t=NULL;
createBiTree(&t);
PreOrderPrintLeaf(t);
return 0;
}