1.学习总结(2分)
1.1树结构思维导图
1.2 树结构学习体会
- 树这一章节比较复杂,知识点繁多,结合了递归的知识所以代码阅读起来会有障碍,难以理解,所以学起来比较吃力,而且很多经典的算法理解的不是很透彻解决pta上的问题时还要多次翻阅课本回顾代码,是需要多花时间学习的一个章节。
2.PTA实验作业(4分)
2.1 题目1:6-2 求二叉树高度
2.2 设计思路(伪代码或流程图)
递归遍历左右子树
if(左子树高度大于右子树高度)
返回左子树高度+1
否则
返回右子树高度+1
当BT=NULL,返回0,递归调用结束
2.3 代码截图(注意,截图、截图、截图。代码不要粘贴博客上。不用用···语法去渲染)
2.4 PTA提交列表说明。
2.1 题目2:7-3 jmu-ds-二叉树层次遍历
2.2 设计思路(伪代码或流程图)
利用函数建树
树的左孩子为该节点i的:2i 树的右孩子为该节点i的:2i+1
左子树递归:bt->lchild =CreateBTree(str,2*i);
右子树递归:bt->rchild =CreateBTree(str,2*i+1);
递归出口:字符下表i超过字符长度 或 str[i]为#;
建立队列将根节点入栈
while(队不空)
{
取队头节点并输出内存元素
队头元素出队
if(左孩子不空){
左孩子进队;
}
if(右孩子不空){
右孩子进队;
}
}
2.3 代码截图(注意,截图、截图、截图。代码不要粘贴博客上。不用用···语法去渲染)
2.4 PTA提交列表说明。
2.1 题目3:6-4 jmu-ds-表达式树
2.2 设计思路(伪代码或流程图)
定义op为字符串栈,s树结点栈
while(遍历字符串)
{
if (str[i]不为运算符)
则将str【i】赋给树节点后入栈
否则{
判断运算符优先级
栈顶优先等级低:将str[i]进栈,i下指
优先等级相等:处在栈顶字符,i下指
栈顶有限等级高:op栈顶元素出栈赋给节点T,s出栈两次分别做T节点左右孩子,T后入s栈
}
while(op栈顶元素不为#){
op栈顶元素赋给T的数据域
s栈不为空时出栈两次分别做T节点左右孩子
将节点T入s栈
}
计算表达式树{
if(左右孩子不为空)
则把T->data转换成数字
利用递归将左右孩子转化为数字存入a,b中
判断节点T的数据域
+:返回a+b
-:返回a-b
*:返回a*b
'/':if(b<1&&b-1)提示错误
退出
2.3 代码截图(注意,截图、截图、截图。代码不要粘贴博客上。不用用···语法去渲染)
2.4 PTA提交列表说明。
3.截图本周题目集的PTA最后排名(3分)
3.1 PTA排名
3.2 我的得分:1.5
4. 阅读代码(必做,1分)
#include <bits/stdc++.h>
using namespace std;
int main()
{
priority_queue<int,vector<int>,greater<int> >l;
int n;
cin>>n;
for(int i=0;i<n;i++)///
{
int t;
cin>>t;
l.push(t);
}
int sum=0;
while( q.size() > 1 ) {
int first = q.top();
q.pop();
int second = q.top();
q.pop();
sum += first + second;
q.push( first + second );
}
printf("%d\n",sum);
}
- (pta修理牧场)这段代码用了优先队列,每次遍历队列时可以将队列中的最小和次小值出队后相加,结果再入队,不同于普通队列的操作,能够高效的解决修理牧场的问题
5. 代码Git提交记录截图