树
1.学习总结(2分)
1.1树结构思维导图 使用思维导图将树结构的知识点串在一起。树中的每个知识点需细化到每个操作如何实现。
1.2 树结构学习体会谈谈你对树结构认识,学习这个结构是否遇到哪些困难及树结构可以解决的问题。
1.树的内容很多也很杂,首先是建树,一种是利用队列辅助建树,一种是递归法建树,然后是遍历树,分递归遍历和非递归遍历,其中又分为先中后序遍历,然后是线索树,哈夫曼树的创建和遍历,表达式树的创建和求值,加起来至少有14种代码,是所有章节中最多的。运用树可以解决高效编码的问题,比如哈夫曼树,老师以前也说过阿尔法狗也是用树的结构写的,就是树可以写一些棋牌类游戏,树还可以帮计算机进行计算用树的结构进行查找也是很高效的;
2.PTA实验作业(4分)
2.1 题目1:6-4 jmu-ds-表达式树(25 分)
2.2 设计思路(伪代码或流程图)
构造表达式树是看老师的模板写的
计算表达式
定义a和b分别表示左子树的值和右子树的值
递归出口是当T为NULL时,返回0;
switch
当T为+时返回a+b
当T为-时返回a-b
当T为*时返回a*b
当T为/时如果分母为0返回错误,否则返回a/b
2.3 代码截图(注意,截图、截图、截图。代码不要粘贴博客上。不用用···语法去渲染)
2.4 PTA提交列表说明。
- 1.忘记把'#'压入栈底,导致运算符无法进入栈
- 2.定义B时没有给B的左右孩子指向导致段错误
2.1 题目2:7-2 根据后序和中序遍历输出先序遍历(25 分)
2.2 设计思路(伪代码或流程图)
根据后序和中序建树
创建根节点
在中序遍历中找到根节点的位置
递归构造左子树
递归构造右子树
递归出口是子树中的结点个数为0时
先序遍历
访问根节点
递归访问左子树
递归访问右子树
2.3 代码截图(注意,截图、截图、截图。代码不要粘贴博客上。不用用···语法去渲染)
2.4 PTA提交列表说明。
这题主要错误是把数字数组当字符串来写,可能是字符串的写多了,一开始写数字数组的输入代码时脑袋是一片空白的,后面才慢慢回想起来,数字数组一定要事先知道数组长度;
2.1 题目3:7-3 jmu-ds-二叉树层次遍历(25 分)
2.2 设计思路(伪代码或流程图)
递归法构建树
建根节点,数值为数组中第i个数值
左子树与根节点位置的关系是2*i,递归构建左子树
右子树与根节点位置关系是2*i+1,递归构建右子树
递归出口是i>len-1和str[i]=='#'
返回根节点
层次遍历
初始化队列
将根节点入队
while to 队列为空
访问队首元素
队首元素左孩子不为空就让左孩子进入队列
队首元素右孩子不为空就让右孩子进入队列
2.3 代码截图(注意,截图、截图、截图。代码不要粘贴博客上。不用用···语法去渲染)
2.4 PTA提交列表说明。
- 1.这题主要是太马虎;
3.截图本周题目集的PTA最后排名(3分)
3.2 我的得分:1分
4. 阅读代码(必做,1分)
家谱处理
一开始想每个节点用vector记录孩子来着,发现好难弄,后面灵光一闪,想到可以记录父亲啊,每个节点就只有一个父亲呀,这样我们就能递归的处理了。就是说对于当前节点,我们可以先处理完孩子,遇到孩子的孩子,先处理孩子的孩子,处理完继续回来处理。然后就想到了递归,具体的看代码更容易理解一些。
得到父亲就好做多了。然后递归的时候顺便给节点标号就OK了。