二叉树采用二叉链表存储,每个结点的值为学生成绩(score),请编写算法分别统计优秀(score>=90)、不及格(score<60)的学生人数,并输出。
要求:
按照先序遍历序列输入元素值,建立二叉链表,孩子结点为空的输入-1。
#include<bits/stdc++.h>
using namespace std;
typedef struct st{
int data;
struct st *l;
struct st *r;
}tree,*link;//定义代替类型
int score[2]={0};//score[0]记录优秀人数,score[1]记录不及格的人数
void create(link &T)//先序建树
{
int n;
scanf("%d",&n);
if(n==-1)
T=NULL;//-1代表空结点,该结点置空
else
{//分配内存
T=(link)malloc(sizeof(tree));
T->data=n;//结点数据域赋值
create(T->l);//创建左子树
create(T->r);//创建右子树
}
}
void pro(link T)//先序遍历二叉树
{
if(T)
{
printf("%d ",T->data);//输出所有成绩
if(T->data>=90)
score[0]++;//记录优秀人数
if(T->data<60)
score[1]++;//记录不及格的人数
pro(T->l);//访问左子树
pro(T->r);//访问右子树
}
}
//75 98 91 -1 -1 95 89 -1 -1 -1 59 -1 40 -1 -1
int main()
{
link T=NULL;
create(T);//先序建树
pro(T);//先序遍历二叉树
printf("\n");
printf("优秀人数:%d\n",score[0]);
printf("不及格的人数:%d\n",score[1]);
return 0;
}