题目描述:小高学完树的知识点后觉得很简单,觉得做什么都很简单,直到遇见本题:要求自己摸索本题森林的输入方式,并用两种方式求出森林中树的叶子节点。
输入格式:
根据输入样例自行判断。
输出格式:
输出森林有几个叶子节点,且格式为‘该森林叶子结点数为n!’
输入样例:
在这里给出一组输入。例如:
1
1
1
0
0
1
0
0
1
1
1
0
0
1
0
0
0
输出样例:
在这里给出相应的输出。例如:
该森林叶子结点数为4!
该森林叶子结点数为4!
解
//头文件包含
#include<iostream>
#include<malloc.h>
#include<stdio.h>
using namespace std;
//函数状态码定义
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -1
#define INFEASIBLE -2
#define NULL 0
typedef int Status;
int s[20];
int cnt=0;
//二叉链表存储结构定义
typedef int TElemType;
typedef struct CSNode
{
TElemType data;
struct CSNode *firstchild;
struct CSNode *nextsibling;
}CSTNode,*CSTree;
Status CreateCSTree(CSTree &CST)
{
TElemType e;
e=s[cnt];
cnt++;
if(e==0)
CST=NULL;
else
{
CST=(CSTNode*)malloc(sizeof(CSTNode));
if(!CST)
exit(OVERFLOW);
CST->data=e;
CreateCSTree(CST->firstchild);
CreateCSTree(CST->nextsibling);
}
return OK;
}
int LealvesCounter(CSTree &T){
if(!T){return 0;}
else if(!T->firstchild) { return 1; }
else{
return LealvesCounter(T->firstchild)+LealvesCounter(T->nextsibling);
}
}
int main()
{
CSTree CST;
for(int j=0;j<17;++j)
{ scanf("%d",&s[j]);
} CreateCSTree(CST);
printf("该森林叶子结点数为%d!\n\n",LealvesCounter(CST)) ;
printf("该森林叶子结点数为%d!\n",LealvesCounter(CST)) ;
}