数据结构测试题用c语言实现?

二叉树采用二叉链表存储,每个结点的值为学生成绩(score),请编写算法分别统计优秀(score>=90)、不及格(score<60)的学生人数,并输出。

要求:

按照先序遍历序列输入元素值,建立二叉链表,孩子结点为空的输入-1。

第1个回答  2020-12-09

#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;

相似回答