第九周学习
20162310林臻 《程序设计与数据结构》第九周学习总结
教材学习内容总结
- 堆的学习及其方法的应用
- 堆排序利用堆的基本特征对一组元素进行排序
教材学习中的问题和解决过程
-
问题1:堆和二叉树有什么区别呢
-
问题1解决方案:
-
1、堆是一个完全二叉树,并且每个结点的值都大于或等于其左右孩子结点的值,具有n个结点的堆,其深度即为堆所对应的完全二叉树的深度log(n).
-
2、在二叉排序树中,某结点的右孩子结点的值一定大于该结点的左孩子结点的值;在堆中却不一定,堆只是限定了某结点的值大于(或小于)其左右孩子结点的值,但没有限定左右孩子结点之间的大小关系。
-
3、 在二叉排序树中,最小值结点是最左下结点,其左指针为空;最大值结点是最右下结点,其右指针为空。在大根堆中,最小值结点位于某个叶子结点,而最大值结点是大根堆的堆顶(即根结点)。
-
4、二叉排序树是为了实现动态查找而设计的数据结构,它是面向查找操作的,在二叉排序树中查找一个结点的平均时间复杂度是O(log n);堆是为了实现排序而设计的一种数据结构,它不是面向查找操作的,因而在堆中查找一个结点需要进行遍历,其平均时间复杂度是O(n)。
-
问题2:优先队列的原理以及实现
-
问题2解决方案:网络上查找到了很详细的信息,博客链接
代码托管
上周考试错题总结
-
1、虽然所有节点在完全相同的层次上的树是平衡的,但并不是所有的平衡树都具有这个属性。 所以选择A并不是最好的答案。 选项D是最好的答案,因为它正确地定义了一棵平衡树
-
2、完整的二叉树正好有2n个叶子,因为每个叶子都在相同的高度,每个内部节点恰好有2个孩子
-
3、水平顺序遍历按照距离根的距离顺序访问树的元素。
-
4、后序遍历访问右侧子树,然后访问左侧子树,然后访问根。 所以,根始终是最后一个被访问的元素。
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 1/1 | 20/20 | |
第二周 | 200/200 | 1/1 | 20/20 | |
第三周 | 200/200 | 1/1 | 22/22 | |
第四周 | 1000/1000 | 1/1 | 30/30 | |
第五周 | 1000/1000 | 1/1 | 22/22 | |
第六周 | 1000/1000 | 1/1 | 30/30 | |
第七周 | 1000/1000 | 1/1 | 20/20 | |
第八周 | 1000/1000 | 1/1 | 20/20 | |
第九周 | 1000/1000 | 1/1 | 20/20 |