## 树的应用题:
数据结构分为线性结构和非线性结构两大类。树和二叉树是非线性结构中非常重要的一员,它适合描述具有层次结构的数据。

  1. 如果将学生的百分制成绩分为5个等级:0-59分为不及格(E),60-69分为及格(D),70-79分为一般(C),80-89分为良好(B),90-100分为优秀(A)。在实际中,学生的成绩在五个等级上的分布是不均匀的,假设其分布概率依次为:0.05,0.14,0.29,0.36,0.16。请采用if…else判断语句设计两个不同的函数实现百分制转换为五级分制,并验证。
    要求:
    (1) 判断语句的效率最高(二叉树带权路径长度最小,用这种思想编程,不是去生成二叉树);
    (2) 判断语句的层数最小(二叉树的高度或深度最小);
#include <stdio.h>
#include <stdlib.h>
#include<iostream>
using namespace std;
#define MAXSIZE 100
typedef char DataType;
typedef struct Node {DataType data; /*数据域*/struct Node *left; /*左孩子指针域*/struct Node *right; /*右孩子指针域*/
}BTNode, *PBTNode, *BiTreeLink;
//(1)创建二叉树
BiTreeLink CreateBiTree(char *nodes, int pos, int num) {PBTNode p;if (nodes[pos] == ' ' || pos > num)  return NULL; /*递归结束条件*/p = (PBTNode)malloc(sizeof(BTNode));/*建立根结点*/if (!p) { printf("初始化链表错误!\n"); return 0; }p->data = nodes[pos];p->left = CreateBiTree(nodes, 2 * pos, num);    /* 递归建立左子树*/p->right = CreateBiTree(nodes, 2 * pos + 1, num);/* 递归建立右子树*/return p;
}
//显示二叉链表
void DispBiTree(BiTreeLink root) { /* root为二叉链表头指针  */PBTNode queue[MAXSIZE]; //循环队列int front, rear;        //队头队尾指针PBTNode p;if (root == NULL)   return;queue[0] = root;        //根结点指针入队front = 0;rear = 1;while (front < rear){p = queue[front];     //根结点指针出队front = (front + 1) % MAXSIZE; if (p == NULL)     //  空指针显示空格printf("( )");else             //非空指针显示结点值printf("(%c)", p->data);if (p != NULL)//若双亲结点不为空,则其左孩子和右孩子指针入队{queue[rear] = p->left;rear = (rear + 1) % MAXSIZE;queue[rear] = p->right;rear = (rear + 1) % MAXSIZE;}}
}
void PreOrder(BiTreeLink r){if(r!=NULL){printf("%c",r->data);   /*访问根*/PreOrder(r->left);  /*前序遍历左子树*/PreOrder(r->right); /*前序遍历右子树*/}
}
void InOrder(BiTreeLink r){if(r!=NULL){        InOrder(r->left);       /*中序遍历左子树*/printf("%c",r->data);   /*访问根*/InOrder(r->right);      /*中序遍历右子树*/}
}
void PostOrder(BiTreeLink r){if(r!=NULL){    PostOrder(r->left);         /*后序遍历左子树*/PostOrder(r->right);    /*后序遍历右子树*/printf("%c",r->data);   /*访问根*/}
} void efficiency(int m)//每层输出不同
{if(m>=80&&m<=89)printf("B");else if(m>=70&&m<=79)printf("C");else if(m>=90&&m<=100)printf("A");else if(m>=60&& m<=69)printf("D");else if(m>=0&&m<=59)printf("E");
}void depth(int m,BiTreeLink root)
{if(m>=80){if(m<=89)cout<<root->data;else if(m<=100){cout<<root->left->data;}}else{if(m>=70)cout<<root->right->data;else {if(m>=60)cout<<root->right->left->data;elsecout<<root->right->right->data;}}
}int main()
{BiTreeLink root;int i;char nodes[] = "#BAC  DE";root = CreateBiTree(nodes, 1, 7);int m;printf("请输入分数:");scanf("%d",&m);printf("效率最高时:"); efficiency(m);printf("\n");printf("深度最小时:"); depth(m,root);printf("\n");
}

2.根据下图的二叉树,计算二叉树的深度(高度)、总节点数、叶子节点数。

#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef char DataType;
typedef struct Node {DataType data; //数据域struct Node *left; //左孩子指针域struct Node *right; //右孩子指针域
}BTNode, *PBTNode, *BiTreeLink;
//创建二叉树
BiTreeLink CreateBiTree(char *nodes, int pos, int num) {PBTNode p;if (nodes[pos] == ' ' || pos > num)  return NULL; //递归结束条件p = (PBTNode)malloc(sizeof(BTNode));//建立根结点if (!p) { printf("初始化链表错误!\n"); return 0; }p->data = nodes[pos];p->left = CreateBiTree(nodes, 2 * pos, num);    // 递归建立左子树p->right = CreateBiTree(nodes, 2 * pos + 1, num);// 递归建立右子树return p;
}
//显示二叉链表
void DispBiTree(BiTreeLink root) // root为二叉链表头指针{ PBTNode queue[MAXSIZE]; //循环队列int front, rear;        //队头队尾指针PBTNode p;if (root == NULL)   return;queue[0] = root;        //根结点指针入队front = 0;rear = 1;while (front < rear){p = queue[front];     //根结点指针出队front = (front + 1) % MAXSIZE; if (p == NULL)     //  空指针显示空格printf("( )");else             //非空指针显示结点值printf("(%c)", p->data);if (p != NULL)//若双亲结点不为空,则其左孩子和右孩子指针入队{queue[rear] = p->left;rear = (rear + 1) % MAXSIZE;queue[rear] = p->right;rear = (rear + 1) % MAXSIZE;}}
}
//二叉树的深度
int BiTreeDepth(BiTreeLink r)
{int ld,rd;if(r==NULL)return 0;else{ld=BiTreeDepth(r->left);rd=BiTreeDepth(r->right);return ld>rd ? ld+1 : rd+1;}
}
//二叉树的结点个数
int BiTreeCount(BiTreeLink r)
{if(r==NULL) return 0;//空二叉树的结点个数为0elsereturn BiTreeCount(r->left)+BiTreeCount(r->right)+1;
}
//二叉树的叶子结点个数
int LeafCount(BiTreeLink r)
{if(!r) return 0;/*空树叶子个数为0*/else if(!r->left && !r->right)/*只有根结点,叶子数为1*/return 1;elsereturn LeafCount(r->left)+LeafCount(r->right);
}
int main(int argc, char *argv[])
{BiTreeLink root;int i;char nodes[] = "#RAEDBFG   C  H              I  ";root = CreateBiTree(nodes, 1, 31);printf("输入序列:\n");for(i = 1; i <=31; i++){printf("(%c)", nodes[i]);}printf("\n");printf("二叉树深度:\n");printf("%d\n", BiTreeDepth(root));printf("二叉树结点个数:\n");printf("%d\n", BiTreeCount(root));printf("二叉树叶子结点个数:\n");printf("%d\n", LeafCount(root));return 1;
}

3
已知二叉树的前序遍历序列为:ABDGCEFH,中序遍历序列为:DGBAECHF。请重建该二叉树,并按照前序序列打印输出每个节点的数据域、左孩子域和右孩子域。

#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#define MAXSIZE 100
typedef char DataType;typedef struct Node{    DataType data;  /*数据域*/ struct Node *left; /*左孩子指针域*/   struct Node *right; /*右孩子指针域*/
}BTNode,*PBTNode,*BiTreeLink;void DispBiTree(BiTreeLink root) { /* root为二叉链表头指针  */PBTNode queue[MAXSIZE]; //循环队列int front, rear;       //队头队尾指针PBTNode p;if (root == NULL)   return;queue[0] = root;        //根结点指针入队front = 0;rear = 1;while (front < rear){p = queue[front];     //根结点指针出队front = (front + 1) % MAXSIZE; if (p == NULL)     //  空指针显示空格printf("( )");else             //非空指针显示结点值{printf("(%c)", p->data);//若双亲结点不为空,则其左孩子和右孩子指针入队queue[rear] = p->left;rear = (rear + 1) % MAXSIZE;queue[rear] = p->right;rear = (rear + 1) % MAXSIZE;}}
}struct Node *create_qianzhong(char *pre, char *mid, int n)
{PBTNode p;int i;if(n==0)return NULL;p=(struct Node *)malloc(sizeof(struct Node));p->data=pre[0];for(i=0;i<n;i++){if(pre[0]==mid[i])break;}p->left=create_qianzhong(pre+1,mid,i);p->right=create_qianzhong(pre+i+1,mid+i+1,n-i-1);return p;}void PreOrder(BiTreeLink r){PBTNode stack[MAXSIZE],p;int top=-1;p=r;while(p||top>-1){if(p){                      //入栈条件printf("%c",p->data);   //访问根结点stack[++top]=p;         //根结点入栈p=p->left;              //遍历左结点}else{p=stack[top--];p=p->right;             //遍历右结点}}
}
void InOrder(BiTreeLink r){if(r!=NULL){        InOrder(r->left);       /*中序遍历左子树*/printf("%c",r->data);   /*访问根*/InOrder(r->right);      /*中序遍历右子树*/}
} void shuchu(BiTreeLink r){BiTreeLink r1,r2;r1=r;r2=r;printf("根:%c ",r->data);   /*访问根*/r1=r->left; if(r->left){printf("左结点:%c ",r1->data); }else{printf("左结点:# "); }r2=r->right;if(r->right){printf("右结点:%c \n",r2->data); }else{printf("右结点:# \n"); }} PBTNode FindNode(BiTreeLink r,DataType x){PBTNode p;if(r==NULL) return NULL;if(r->data==x)   return r;p=FindNode(r->left,x);if(p) return p;else  return FindNode(r->right,x);
}int main()
{struct Node *root;char qian[]="ABDGCEFH";char zhong[]="DGBAECHF";int n,i,*p;n=strlen(qian);root=create_qianzhong(qian, zhong, n);PreOrder(root);printf("\n");InOrder(root);printf("\n");for(i=0;i<n;i++){shuchu(FindNode(root,qian[i])) ;} }

支持可以关注我哦,持续分享编写的代码。

1. 如果将学生的百分制成绩分为5个等级:0-59分为不及格(E),60-69分为及格(D),70-79分为一般(C),80-89分为良好(B),90-100分为优秀(A)。在实际中,学生的成绩在五个相关推荐

  1. 从键盘接收一百分制成绩( 0~100),要求输出其对应的成绩等级 A~E。其中,90 分以上为'A',80~89 分为'B', 70~79分为'C', 60~69分为'D', 60 分以下为'E'。

    从键盘接收一百分制成绩( 0~100),要求输出其对应的成绩等级 A~E. 其中,90 分以上为 'A',80~89 分为 'B', 70~79分为 'C', 60~69分为 'D', 60 分以下为 ...

  2. [C程序设计]给出一百分制成绩,要求输出成绩等级“优秀”、“良好”、“中等”、“及格”、“不及格”。90分以上为“及格”,80~89分为“良好”......

    用C语言设计程序实现,给出一百分制成绩,"优秀"."良好"."中等"."及格"."不及格".90分以 ...

  3. 6、从键盘接收一百分制成绩(0~100),要求输出其对应的成绩等级A~E。其中,90分以上为‘A‘,80~89分为‘B‘,70~79分为‘C‘,60~69分为‘D‘,60分以下为‘E‘。

    a=int(input("请输入您的成绩:")) if a>=90:print("等级为:A") elif a>=80:print("等级 ...

  4. 输入一个正整数n,再输入n个学生的姓名和百分制成绩,将其转换为两级制成绩后输出。要求定义和调用函数set_grade(stu, n),其功能是根据结构数组stu中存放的学生的百分制成绩score,将其

    输入一个正整数n,再输入n个学生的姓名和百分制成绩,将其转换为两级制成绩后输出.要求定义和调用函数set_grade(stu, n),其功能是根据结构数组stu中存放的学生的百分制成绩score,将其 ...

  5. 给出一个百分制成绩,要求输出成绩等级A,B,C,D,E。90分以上为A,80~89分为B,70~79分为C,60~69分为D,60分以下为E

    欢迎加qq群:453398542 学习讨论,会定期分享资料课程,解答问题. 1.         给出一个百分制成绩,要求输出成绩等级A,B,C,D,E.90分以上为A,80~89分为B,70~79分 ...

  6. C语言程序之经典习题:给出一百分制成绩,要求输出成绩等级‘A‘B ‘C‘D‘E ‘,90 分以上为‘A”,80~89 分为‘B‘,70~79 分为‘C‘,60~69 分为‘D‘,60 分以下为‘E‘

    给出一百分制成绩,要求输出成绩等级'A'.'B'. 'C'.'D'.'E' . 并且要判断,输入的是否是一百以内的数 90 分以上为''A",80~89 分为'B',70~79 分为'C', ...

  7. matlab筛选不及格,matlab 学生成绩60不及格 60~69及格 70~79中等 80~89良好 90优秀...

    满意答案 http://zhidao.baidu.com/question/79941625.html?an=0&si=1 绘图, http://zhidao.baidu.com/questi ...

  8. 习题 3.11 给出一个百分制的成绩,要求输出成绩等级'A','B','C','D','E'。90分以上为'A',80~89分为'B',70~79分为'C',60~69分为'D',60分以下为'E'。

    C++程序设计(第三版) 谭浩强 习题3.11 个人设计 习题 3.11 给出一个百分制的成绩,要求输出成绩等级'A','B','C','D','E'.90分以上为'A',80~89分为'B',70~ ...

  9. 设有一个数组存放学生的成绩(0~100),编制一个子程序统计0~59分,60~69分, 70~79分, 80~89分,90~100分的人数,并分别存放到scoreE, scoreD, scoreC,

    汇编语言 设有一个数组存放学生的成绩(0100),编制一个子程序统计059分,60~69分, 70~79分, 8089分,90100分的人数,并分别存放到scoreE, scoreD, scoreC, ...

最新文章

  1. Mobileye 自动驾驶策略(一)
  2. 比特币的价格今年会达到10万美元吗?有人用蒙特卡罗方法预测了一下
  3. 联合国发布AI报告:自动化和AI对亚洲有巨大影响【附报告下载】
  4. 错误:返回局部变量数组名 \ 解决方案
  5. velocity参数重新赋值_Velocity(5)——#set指令
  6. mysql数据库java链接,java链接MySQL数据库方法
  7. 为你的应用程序添加动态Java代码
  8. python百度百科-python语言是由哪个人创造的
  9. 【2018宁夏邀请赛 L】Continuous Intervals【线段树】
  10. 国内研究报告:区块链技术在票据P2…
  11. word退出时,提示”更改会影响共用模板normal.dotm“的处理办法
  12. 从无到有 win10建window xp虚拟机之总结
  13. Qt使用libvips处理超大图片(GB以上图片)
  14. 香港服务器防攻击能力好吗
  15. 杨洋江疏影封面照合体,《全职》诠释衣品即人品
  16. 数据分析师——个人求职之路经历分享(2020届)
  17. 这10个超厉害的工具堪称神器,却很少人知道!
  18. LTspice基础教程-015.导入第三方库
  19. Android通过广播接收器BroadcastReceiver监听蓝牙连接变化
  20. -Dmaven.multiModuleProjectDirectory system propery is not set. Check $M2_HOME environment variable a

热门文章

  1. Dalsa智能相机使用流程
  2. excel 的 导入
  3. OpenEuler华为欧拉系统安装教程及联网配置
  4. 2019大一寒假作业:校园一卡通信息管理系统
  5. linux kickstart之中rootpw密码生成方法
  6. 火炬2 贴吧导航(大纲1.0)
  7. 摄像机的定焦和变焦镜头
  8. 单片机与PC机一样都是计算机,单片机与pc机什么区别
  9. OpenAI发布新算法MuseNet,让甲壳虫乐队与LadyGaga一起演奏
  10. 软件测试 毕业设计任务书,软件测试任务书