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提交记录截图