博客作业04--树
1.学习总结(2分)
1.1树结构思维导图
1.2 树结构学习体会
树的定义:
树是n个结点的有限集。在任意一个非空的树中:
(1)有且仅有一个特定的称为根的结点;(2)其余结点可以分成m个互不相交的子集,其中每一个子集又是一个树,称为子树。
结点的度:
结点拥有的子树的个数
树的度:
树中各结点的度的最大值
树的结点之间的关系:
结点的子树的根称为该结点的孩子,此结点就是孩子的双亲;同一个双亲的孩子称为兄弟;结点的祖先是从根节点到该结点所经过的所有结点;结点的子孙是以此结点为根的子树的子树的任一结点;双亲在同一层的结点称为堂兄弟;树中结点的最大层次称为树的深度;
有序树:树中结点各子树看成是从左到右有次序的,不能互换的
森林:互不相交的m个子树的集合
2.PTA实验作业
2.1 题目1:6-2 求二叉树高度
2.2 设计思路(伪代码或流程图)
int GetHeight(BinTree BT)
定义HL,HR用于递归求高度,MAXH用于求最高高度
if(BT不为空){
递归求左子树高度HL
递归求右子树高度HR
if(左子树HL高于右HR) MAXH=HL;
否则 MAXH=HR
返回最高节点MAXH
}
else(BT为空)
返回高度为0;
2.3 代码截图(注意,截图、截图、截图。代码不要粘贴博客上。不用用···语法去渲染)
2.4 PTA提交列表说明。
编译错误:在代码中多次出现了中文符号的引号和逗号,经过多次修改解决
2.1 题目2:7-2 根据后序和中序遍历输出先序遍历
2.2 设计思路(伪代码或流程图)
CreateBT2(后序post 中序in 个数n)
定义树b,整形data值r
if (n <= 0) 退出并返回0;
r =后序最后一个节点
int i;
b->data = r;
for i=0 to n-1
if (in[i] == r) break;
end for
输出b->data
应用递归求左子树下一个节点;
应用递归求右字数下一个节点;
2.3 代码截图(注意,截图、截图、截图。代码不要粘贴博客上。不用用···语法去渲染)
2.4 PTA提交列表说明。
部分正确: post 和 in的数组给的值太少 导致段错误
2.1 题目3:6-4 jmu-ds-表达式树
2.2 设计思路(伪代码或流程图)
void 建树
{
建op栈,树s
#进栈
while(str[i]!=NULL)
if(str[i]是运算符){
以str[i]为数据,建立s节点
}
else{
if(str[i]比栈顶优先级小) 进站
else if(优先级相同) 出栈
else 建立下一个节点并进栈
}
}
void 计算
double a,b
if(树空) 返回0;
if(是叶子节点) 返回 T->data-'0'
计算左孩子
计算右孩子
switch(T->data)
case + :返回a+b
case - :返回a-b
case * :返回 a*b
case / : 若a不为0 返回b/a
否则返回 输出 drive 0 error!
2.3 代码截图(注意,截图、截图、截图。代码不要粘贴博客上。不用用···语法去渲染)
2.4提交列表代码说明
3.截图本周题目集的PTA最后排名
本次题目集总分:285分
必做题共:230分
3.1 PTA排名截图
编译错误:在选择C和C++时没注意到用的是C 导致代码出错一直不过
3.2 我的总分:186
本题评分规则:
(1)2个题目集PTA总分285分:3分(全部题目都做)
(2)PTA总分在230分--340分:2.5分(必做题全部做完,选做题做部分)
(3)PTA总分在180--230分:2分(必做题大部分做完)
(4)PTA总分在130--180分:1.5分
(5)PTA总分在105分-130分:1分
(6)PTA总分在105分以下:0分
4. 阅读代码(必做)
1949年的国庆节(10月1日)是星期六。
今年的国庆节是星期一。
那么,从建国到2012年,有几次国庆节正好是星期日呢?
#include<stdio.h>
int Run(int year)
{
if(year%400==0||(year%4==0&&year%100!=0))
return 1;
else
return 0;
}
int month(int year,int n)
{
int aws;
switch(n)
{
case 1:aws=31;break;
case 2:{
if(Run(year))
aws=29;
else aws=28;
}break;
case 3:aws=31;break;
case 4:aws=30;break;
case 5:aws=31;break;
case 6:aws=30;break;
case 7:aws=31;break;
case 8:aws=31;break;
case 9:aws=30;break;
case 10:aws=31;break;
case 11:aws=30;break;
case 12:aws=31;break;
}
return aws;
}
int main()
{
int i,j,x,sum;
sum=5;
for(i=10;i<=12;i++)
{
sum+=month(1949,i);
}
for(i=1950;i<=2017;i++)//今天是2018年5月5日,所以算到2017年即可
{
for(j=1;j<=12;j++)
{
sum+=month(i,j);
if(j==9)
{
x=sum%7;
if(x+1==7)
printf("%d年的国庆节是星期日。\n",i);
}
}
}
return 0;
}
先用一个函数判断是否是闰年 在用一个函数判断每个月有几天 如果是九月份最后一天是星期1 则10月1号是星期天 则该次计入 从1950到2017年全部计入后 得到总数则为结果
5. 代码Git提交记录截图
在码云的项目中,依次选择统计-Commits历史-设置时间段,进行搜索并截图,如下图所示,需要出现学号、项目提交说明。请在码云中将你的昵称改为“学号-姓名”。