1.学习总结(2分)
1.1树结构思维导图
1.2 树结构学习体会
对于本章树结构的学习,我觉得对于自己来说难度比前面的学习要更大,在做题的时候总是弄不清楚树中节点,父母亲,孩子的各种关系操作,有时候觉得有点抽象,对于书上的代码有一些也不是完全能理解,还是要再对树这节花很多的时间了
2.PTA实验作业(4分)
2.1 题目1:计算表达式树(暂未完成)
2.1 题目2:7-8 jmu-ds-二叉树叶子结点带权路径长度和(25 分)
2.2 设计思路(伪代码或流程图)
建树,将二叉树的顺序存储结构转换为链式存储结构
BTNode *bt;
if i大于字符串长度或小于0
返回NULL;
if 节点不存在,
返回NULL
创建根节点
记录各节点的长度bt->k=log(i)/log(2)+1;
递归创建左子树bt->lchild =CreateBTree(str,2*i);
递归创建右子树bt->rchild =CreateBTree(str,2*i+1);
返回bt
end
求叶子节点的WPL
if 树为空
返回0
找到叶子节点
sum1=sum1+(bt->data-\'0\')*(bt->k-1);
递归求出左子树叶子节点的WPL
递归求出左子树叶子节点的WPL
返回 sum1
end
2.3 代码截图
2.4 PTA提交列表说明。
一开始时将记录叶子节点长度b->k放到WPL函数中,这时记录的是最底层叶子节点的长度,求不出树中的其他叶子节点的长度,并且sum1定义在WPL函数中,这样每次递归后sum1的一开始都会置于0,导致递归失败;
后来改为上述后,答案正确,但是还是有测试点未过
没有考虑到如果树为空,应输出0;
2.1 题目3:7-7 修理牧场(25 分)
2.2 设计思路
定义total,n;
输入n;
调用priority_queue<int,vector<int>,greater<int> >que;//调用此函数,可将输入的数据做升序处理
循环输入长度k,que.push(k);
while(que.size()>1){
取栈中两较小元素
total+=a+b;
que.push(a+b);
}
输出total
end
2.3 代码截图
2.4 PTA提交列表说明。
一开始的时候是采用数组做的,其思路就是将木块的各个长度存放于数组中,然后做升序处理,在从数组中取出两较小元素相加后,将此结果再次插入取出后的数组中,仍保持有序,循环处理遍历完数组,最后输出的相加的结果就是最少的花费,这样做可以实现题目的要求,但是pta上却是显示答案错误,
后来在网上看到说可以调用priority_queue<int,vector
,greater >que函数,然后就试了试,发现可以
顺便附一下此函数的具体用法的链接: https://www.cnblogs.com/Deribs4/p/5657746.html
3.截图本周题目集的PTA最后排名(3分)
3.1 PTA排名:
3.2 我的得分:205
4. 阅读代码(必做,1分)
构造哈夫曼树
此题为构造哈夫曼树,然后求出WPL,做这题一开始想得是每次选择两个数据相加后马上进行一次快速排序。其实每次相加后是一个相对有序的数组,用快排是不合适的,但是上述代码调用了priority_queue<int, vector
,greater > Q; //建立一个小顶堆,使用C++利用优先队列构建小顶堆来实现哈夫曼树速度更快,
代码链接:http://www.cnblogs.com/yuxiaoba/p/8435915.html